From ebb7f10b81e5d283f888b75ccadd67bb734bf8ba Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 21:36:08 -0500
Subject: [PATCH 01/18] docs: add spec-identity-pipeline design plan
Identity-keyed codegen: committed api-surface manifest, multi-doc spec
merge, canonicalization, and a classified release gate. Eliminates the
class of breakage where JD spec reorders/splits rebind generated method
names or silently drop documents.
---
.../2026-07-01-spec-identity-pipeline.md | 156 ++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 docs/plans/2026-07-01-spec-identity-pipeline.md
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..d2b25dc
--- /dev/null
+++ b/docs/plans/2026-07-01-spec-identity-pipeline.md
@@ -0,0 +1,156 @@
+# 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.
From 5211bafebc978d935fb4480dc960b0ef3c66b66e Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 21:50:10 -0500
Subject: [PATCH 02/18] fix(pipeline): loud exit codes and deterministic
generated output
Entrypoints swallowed thrown errors (main().catch(console.error) exits 0)
and fix-specs swallowed per-file failures, so CI could ship stale specs on
a green run. Generators embedded wall-clock timestamps, making output
nondeterministic. Fail loudly, drop the timestamps, sort the types-index
read order, and ignore upcoming scratch files.
---
.gitignore | 6 ++++++
scripts/fetch-specs.ts | 5 ++++-
scripts/fix-specs.ts | 11 ++++++++++-
scripts/generate-api-servers.ts | 2 --
scripts/generate-sdk.ts | 5 ++++-
scripts/generate-types.ts | 11 ++++++++---
src/api-servers.generated.ts | 1 -
src/types/generated/index.ts | 2 +-
8 files changed, 33 insertions(+), 10 deletions(-)
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/scripts/fetch-specs.ts b/scripts/fetch-specs.ts
index a55901e..0afc92a 100644
--- a/scripts/fetch-specs.ts
+++ b/scripts/fetch-specs.ts
@@ -121,4 +121,7 @@ async function main() {
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..2856dd8 100644
--- a/scripts/fix-specs.ts
+++ b/scripts/fix-specs.ts
@@ -816,8 +816,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..287071e 100644
--- a/scripts/generate-sdk.ts
+++ b/scripts/generate-sdk.ts
@@ -1005,4 +1005,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..0205452 100644
--- a/scripts/generate-types.ts
+++ b/scripts/generate-types.ts
@@ -32,7 +32,9 @@ 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 }[] = [];
@@ -75,7 +77,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')}
@@ -90,4 +92,7 @@ ${generated.map((g) => `export type { paths as ${g.module}Paths, components as $
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/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/types/generated/index.ts b/src/types/generated/index.ts
index 7e86eff..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-05-26T15:57:43.699Z
+ * @generated
*/
export type { components as AempComponents, paths as AempPaths } from './aemp.js';
From 2bada20ef704199ed0911bb7b47d3ef9df54c114 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 22:17:16 -0500
Subject: [PATCH 03/18] refactor(codegen): extract legacy method naming into a
testable module
Relocate inferMethodName, the order-sensitive collision loop, and the
string helpers out of the generate-sdk entrypoint. generateMethod now
consumes a precomputed name. Regenerated output is byte-identical; the
extracted module exists only to seed the upcoming api-surface manifest
and is scheduled for deletion.
---
scripts/generate-sdk.ts | 68 +-----
scripts/lib/legacy-method-names.ts | 72 ++++++
scripts/lib/spec-utils.ts | 12 +
tests/legacy-method-names.test.ts | 345 +++++++++++++++++++++++++++++
4 files changed, 436 insertions(+), 61 deletions(-)
create mode 100644 scripts/lib/legacy-method-names.ts
create mode 100644 tests/legacy-method-names.test.ts
diff --git a/scripts/generate-sdk.ts b/scripts/generate-sdk.ts
index 287071e..63f387d 100644
--- a/scripts/generate-sdk.ts
+++ b/scripts/generate-sdk.ts
@@ -13,13 +13,14 @@
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { basename, join } from 'node:path';
import * as yaml from 'yaml';
+import { resolveLegacyMethodNames } from './lib/legacy-method-names.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 +134,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 +149,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 +191,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 +421,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) {
@@ -581,9 +525,11 @@ ${lines.join('\n')}
}
function generateApiClass(api: GeneratedApi): string {
- const usedMethodNames = new Set();
+ const names = resolveLegacyMethodNames(api.operations);
- const methods = api.operations.map((op) => generateMethod(op, usedMethodNames)).join('\n\n');
+ const methods = api.operations
+ .map((op) => generateMethod(op, names.get(`${op.method.toUpperCase()} ${op.path}`)!))
+ .join('\n\n');
// Determine which imports are actually used. PaginatedResponse is needed by
// EVERY collection GET, including the PaginatedResponse fallback for
diff --git a/scripts/lib/legacy-method-names.ts b/scripts/lib/legacy-method-names.ts
new file mode 100644
index 0000000..087a0f2
--- /dev/null
+++ b/scripts/lib/legacy-method-names.ts
@@ -0,0 +1,72 @@
+/**
+ * Legacy order-sensitive method naming, extracted verbatim from
+ * generate-sdk.ts for the one-time api-surface manifest seed.
+ *
+ * Used only by scripts/seed-api-surface.ts. Scheduled for deletion once the
+ * manifest lands. Do not use for live generation.
+ */
+
+import { toCamelCase, toPascalCase } from './spec-utils.js';
+
+export interface LegacyNamedOp {
+ operationId: string;
+ method: 'get' | 'post' | 'put' | 'patch' | 'delete';
+ path: string;
+ isCollection: boolean;
+}
+
+export function inferLegacyMethodName(op: LegacyNamedOp): 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`);
+}
+
+export function resolveLegacyMethodNames(ops: LegacyNamedOp[]): Map {
+ const usedMethodNames = new Set();
+ const names = new Map();
+
+ for (const op of ops) {
+ let methodName = inferLegacyMethodName(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);
+
+ names.set(`${op.method.toUpperCase()} ${op.path}`, methodName);
+ }
+
+ return names;
+}
diff --git a/scripts/lib/spec-utils.ts b/scripts/lib/spec-utils.ts
index 4855dc4..7efc012 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"
diff --git a/tests/legacy-method-names.test.ts b/tests/legacy-method-names.test.ts
new file mode 100644
index 0000000..92d6075
--- /dev/null
+++ b/tests/legacy-method-names.test.ts
@@ -0,0 +1,345 @@
+import assert from 'node:assert';
+import { describe, it } from 'node:test';
+import {
+ inferLegacyMethodName,
+ type LegacyNamedOp,
+ resolveLegacyMethodNames,
+} from '../scripts/lib/legacy-method-names.js';
+
+describe('legacy-method-names', () => {
+ describe('inferLegacyMethodName: operationId heuristics', () => {
+ it('getall* maps to list', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'getAllWidgets',
+ method: 'get',
+ path: '/widgets',
+ isCollection: true,
+ }),
+ 'list'
+ );
+ });
+
+ it('list* maps to list', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'listFields',
+ method: 'get',
+ path: '/fields',
+ isCollection: true,
+ }),
+ 'list'
+ );
+ });
+
+ it('/^get[a-z]+s$/ maps to list', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'getFields',
+ method: 'get',
+ path: '/fields',
+ isCollection: true,
+ }),
+ 'list'
+ );
+ });
+
+ it('get* (no "all") maps to get', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'getField',
+ method: 'get',
+ path: '/fields/{id}',
+ isCollection: false,
+ }),
+ 'get'
+ );
+ });
+
+ it('get* containing "all" anywhere is excluded from the get branch by the includes("all") guard', () => {
+ // Preserved quirk: the guard is `!id.includes('all')`, not a narrower
+ // `!id.startsWith('getall')`. isCollection: true makes this
+ // discriminating -- if the guard were broken this would incorrectly
+ // return 'get' instead of falling through to the HTTP-method
+ // fallback's 'list'.
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'getFallbackField',
+ method: 'get',
+ path: '/fallbackFields',
+ isCollection: true,
+ }),
+ 'list'
+ );
+ });
+
+ it('create* maps to create', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'createWidget',
+ method: 'post',
+ path: '/widgets',
+ isCollection: false,
+ }),
+ 'create'
+ );
+ });
+
+ it('post* (not containing "get") maps to create', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'postWidget',
+ method: 'post',
+ path: '/widgets',
+ isCollection: false,
+ }),
+ 'create'
+ );
+ });
+
+ it('update* maps to update', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'updateWidget',
+ method: 'put',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'update'
+ );
+ });
+
+ it('put* maps to update', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'putWidget',
+ method: 'put',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'update'
+ );
+ });
+
+ it('delete* maps to delete', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'deleteWidget',
+ method: 'delete',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'delete'
+ );
+ });
+
+ it('remove* maps to delete', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: 'removeWidget',
+ method: 'delete',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'delete'
+ );
+ });
+ });
+
+ describe('inferLegacyMethodName: HTTP-method fallback (operationId matches no heuristic)', () => {
+ it('get + isCollection -> list', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'get',
+ path: '/widgets',
+ isCollection: true,
+ }),
+ 'list'
+ );
+ });
+
+ it('get + item -> get', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'get',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'get'
+ );
+ });
+
+ it('post -> create', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'post',
+ path: '/widgets',
+ isCollection: false,
+ }),
+ 'create'
+ );
+ });
+
+ it('put -> update', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'put',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'update'
+ );
+ });
+
+ it('patch -> patch', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'patch',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'patch'
+ );
+ });
+
+ it('delete -> delete', () => {
+ assert.strictEqual(
+ inferLegacyMethodName({
+ operationId: '',
+ method: 'delete',
+ path: '/widgets/{id}',
+ isCollection: false,
+ }),
+ 'delete'
+ );
+ });
+ });
+
+ describe('resolveLegacyMethodNames: collision and order sensitivity', () => {
+ // The real incident shapes: two item endpoints that both infer the bare
+ // 'get' name (operationId left blank so the HTTP-method fallback fires
+ // for both). Real toPascalCase semantics lowercase interior caps, so
+ // /fieldOps/{id} suffixes to "Fieldops", not "FieldOps".
+ const fieldOperationsOp: LegacyNamedOp = {
+ operationId: '',
+ method: 'get',
+ path: '/fieldOperations/{operationId}',
+ isCollection: false,
+ };
+ const fieldOpsOp: LegacyNamedOp = {
+ operationId: '',
+ method: 'get',
+ path: '/fieldOps/{operationId}',
+ isCollection: false,
+ };
+
+ it('two ops both inferring get: the second gets a PascalCased last-non-param-segment suffix', () => {
+ const names = resolveLegacyMethodNames([fieldOperationsOp, fieldOpsOp]);
+ assert.strictEqual(names.get('GET /fieldOperations/{operationId}'), 'get');
+ assert.strictEqual(names.get('GET /fieldOps/{operationId}'), 'getFieldops');
+ });
+
+ // ORDER SENSITIVITY (deliberate): this test freezes the bug this branch
+ // exists to remove. It documents CURRENT behavior only -- feeding the
+ // same two colliding ops in reversed order silently swaps which one
+ // gets the bare 'get' name. This test (and the module it tests) is
+ // deleted once the manifest-based naming lands in a later commit.
+ it('reversing input order swaps which op gets the bare name', () => {
+ const names = resolveLegacyMethodNames([fieldOpsOp, fieldOperationsOp]);
+ assert.strictEqual(names.get('GET /fieldOps/{operationId}'), 'get');
+ assert.strictEqual(names.get('GET /fieldOperations/{operationId}'), 'getFieldoperations');
+ });
+ });
+
+ describe('resolveLegacyMethodNames: cumulative counter quirk', () => {
+ it('a third collision on the same base+suffix appends the counter cumulatively (getX, getX2, getX23)', () => {
+ // Preserved quirk: the while-loop counter appends to the
+ // already-suffixed methodName each iteration rather than restarting
+ // from the base+suffix, so a third collision on the same pair
+ // produces "getX23", not "getX3".
+ const ops: LegacyNamedOp[] = [
+ // Claims the bare 'get' name so the next three all collide.
+ { operationId: '', method: 'get', path: '/seed/{id}', isCollection: false },
+ // All three share the same last-non-param segment ("x"), so they
+ // all suffix to the same "X" and collide with each other in turn.
+ { operationId: '', method: 'get', path: '/a/{aId}/x/{xId}', isCollection: false },
+ { operationId: '', method: 'get', path: '/b/{bId}/x/{xId}', isCollection: false },
+ { operationId: '', method: 'get', path: '/c/{cId}/x/{xId}', isCollection: false },
+ ];
+
+ const names = resolveLegacyMethodNames(ops);
+
+ assert.strictEqual(names.get('GET /seed/{id}'), 'get');
+ assert.strictEqual(names.get('GET /a/{aId}/x/{xId}'), 'getX');
+ assert.strictEqual(names.get('GET /b/{bId}/x/{xId}'), 'getX2');
+ assert.strictEqual(names.get('GET /c/{cId}/x/{xId}'), 'getX23');
+ });
+ });
+
+ describe('resolveLegacyMethodNames: real equipment.yaml collision chain', () => {
+ // Reproduces the exact operationIds and paths declared in
+ // specs/fixed/equipment.yaml, in file order, verified against the
+ // committed src/api/equipment.ts. GET /equipment and GET /equipment/{id}
+ // have no operationId in the spec, so parseSpec's synthesized fallback
+ // ("get" + path letters only) applies. GET /equipmentMakes is not one of
+ // the five asserted names below -- it is required scaffolding: it is
+ // what claims the bare 'list' name first, which is why GET
+ // /equipmentISGTypes collides into 'listEquipmentisgtypes' instead of
+ // staying 'list'.
+ it('locks in the five real method names shipped in src/api/equipment.ts', () => {
+ const ops: LegacyNamedOp[] = [
+ { operationId: 'getequipment', method: 'get', path: '/equipment', isCollection: true },
+ {
+ operationId: 'getequipmentid',
+ method: 'get',
+ path: '/equipment/{id}',
+ isCollection: false,
+ },
+ {
+ operationId: 'getEquipmentMakes',
+ method: 'get',
+ path: '/equipmentMakes',
+ isCollection: true,
+ },
+ {
+ operationId: 'getEquipmentISGTypes',
+ method: 'get',
+ path: '/equipmentISGTypes',
+ isCollection: true,
+ },
+ {
+ operationId: 'getEquipmentISGTypesByMakeId',
+ method: 'get',
+ path: '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes',
+ isCollection: true,
+ },
+ {
+ operationId: 'getEquipmentISGTypeByMakeIdAndISGTypeId',
+ method: 'get',
+ path: '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}',
+ isCollection: false,
+ },
+ ];
+
+ const names = resolveLegacyMethodNames(ops);
+
+ assert.strictEqual(names.get('GET /equipment'), 'get');
+ assert.strictEqual(names.get('GET /equipment/{id}'), 'getEquipment');
+ assert.strictEqual(names.get('GET /equipmentMakes'), 'list');
+ assert.strictEqual(names.get('GET /equipmentISGTypes'), 'listEquipmentisgtypes');
+ assert.strictEqual(
+ names.get('GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes'),
+ 'getEquipmentisgtypes'
+ );
+ assert.strictEqual(
+ names.get('GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}'),
+ 'getEquipmentisgtypes2'
+ );
+ });
+ });
+});
From 5a4bc04663f746e503bb1e759f1870859bea5f84 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 22:34:11 -0500
Subject: [PATCH 04/18] style(tests): replace dash-substitute punctuation in
comments
---
tests/legacy-method-names.test.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/legacy-method-names.test.ts b/tests/legacy-method-names.test.ts
index 92d6075..b34ecb7 100644
--- a/tests/legacy-method-names.test.ts
+++ b/tests/legacy-method-names.test.ts
@@ -59,7 +59,7 @@ describe('legacy-method-names', () => {
it('get* containing "all" anywhere is excluded from the get branch by the includes("all") guard', () => {
// Preserved quirk: the guard is `!id.includes('all')`, not a narrower
// `!id.startsWith('getall')`. isCollection: true makes this
- // discriminating -- if the guard were broken this would incorrectly
+ // discriminating: if the guard were broken this would incorrectly
// return 'get' instead of falling through to the HTTP-method
// fallback's 'list'.
assert.strictEqual(
@@ -245,7 +245,7 @@ describe('legacy-method-names', () => {
});
// ORDER SENSITIVITY (deliberate): this test freezes the bug this branch
- // exists to remove. It documents CURRENT behavior only -- feeding the
+ // exists to remove. It documents CURRENT behavior only. Feeding the
// same two colliding ops in reversed order silently swaps which one
// gets the bare 'get' name. This test (and the module it tests) is
// deleted once the manifest-based naming lands in a later commit.
@@ -287,7 +287,7 @@ describe('legacy-method-names', () => {
// committed src/api/equipment.ts. GET /equipment and GET /equipment/{id}
// have no operationId in the spec, so parseSpec's synthesized fallback
// ("get" + path letters only) applies. GET /equipmentMakes is not one of
- // the five asserted names below -- it is required scaffolding: it is
+ // the five asserted names below. It is required scaffolding: it is
// what claims the bare 'list' name first, which is why GET
// /equipmentISGTypes collides into 'listEquipmentisgtypes' instead of
// staying 'list'.
From 6a16ab0036eb1556f472c128de2c6a638dd07a91 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 22:57:59 -0500
Subject: [PATCH 05/18] feat(codegen): add api-surface manifest library
Pure library for the committed operation-identity registry: loader with
loud validation, deterministic serializer with an embedded runbook,
shared op extraction, order-independent name resolution, and a
deterministic proposer for new operations (no positional counters).
normalizePathPattern moves here so manifest identity and HATEOAS
matching share one implementation.
---
scripts/generate-sdk.ts | 11 +-
scripts/lib/api-surface.ts | 498 +++++++++++++++++++++++++++
tests/api-surface.test.ts | 665 +++++++++++++++++++++++++++++++++++++
3 files changed, 1164 insertions(+), 10 deletions(-)
create mode 100644 scripts/lib/api-surface.ts
create mode 100644 tests/api-surface.test.ts
diff --git a/scripts/generate-sdk.ts b/scripts/generate-sdk.ts
index 63f387d..7c954be 100644
--- a/scripts/generate-sdk.ts
+++ b/scripts/generate-sdk.ts
@@ -13,6 +13,7 @@
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { basename, join } from 'node:path';
import * as yaml from 'yaml';
+import { normalizePathPattern } from './lib/api-surface.js';
import { resolveLegacyMethodNames } from './lib/legacy-method-names.js';
import {
collectionItemType,
@@ -698,16 +699,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 —
diff --git a/scripts/lib/api-surface.ts b/scripts/lib/api-surface.ts
new file mode 100644
index 0000000..e406b07
--- /dev/null
+++ b/scripts/lib/api-surface.ts
@@ -0,0 +1,498 @@
+/**
+ * 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. Matched via normalizePathPattern. */
+ 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.
+ */
+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 normalized identity 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}. Seed it with scripts/seed-api-surface.ts ` +
+ `(pnpm tsx scripts/seed-api-surface.ts) and commit scripts/api-surface.yaml. ` +
+ `The generator never auto-seeds: seeding from freshly fetched specs 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 seenKeys = new Map();
+ 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);
+
+ const key = opKey(parsedOp[1], parsedOp[2]);
+ const priorOp = seenKeys.get(key);
+ if (priorOp !== undefined) {
+ fail(
+ `spec "${specName}": duplicate operation identity ${JSON.stringify(key)} from op ${JSON.stringify(op)} ` +
+ `(already declared by ${JSON.stringify(priorOp)}); path-param names collapse to the same identity`
+ );
+ }
+ seenKeys.set(key, op);
+
+ 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.
+#
+# 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.
+ *
+ * - Pinned: an op whose identity matches a manifest entry gets that name.
+ * - missing: manifest entries with no matching op (the breaking signal).
+ * - New ops (no entry): proposed in opKey-sorted order, each against the set
+ * of pinned names, accrued proposals, and any implied `listAll` twins.
+ *
+ * The returned `names` map is identical regardless of the input order of
+ * `ops`: no positional dependence anywhere.
+ */
+export function resolveMethodNames(
+ specName: string,
+ ops: SurfaceOp[],
+ surface: ApiSurface
+): { names: Map; newEntries: SurfaceEntry[]; missing: SurfaceEntry[] } {
+ const surfaceEntries = surface.specs[specName] ?? [];
+
+ const entryByKey = new Map();
+ for (const entry of surfaceEntries) {
+ const parsed = OP_PATTERN.exec(entry.op);
+ if (parsed) entryByKey.set(opKey(parsed[1], parsed[2]), entry);
+ }
+
+ const names = new Map();
+ const takenNames = new Set();
+ const matchedKeys = new Set();
+
+ const pinned: Array<{ op: SurfaceOp; key: string; name: string }> = [];
+ const fresh: Array<{ op: SurfaceOp; key: string }> = [];
+ for (const op of ops) {
+ const key = opKey(op.method, op.path);
+ const entry = entryByKey.get(key);
+ if (entry) {
+ pinned.push({ op, key, name: entry.name });
+ matchedKeys.add(key);
+ } else {
+ fresh.push({ op, key });
+ }
+ }
+
+ // Pinned names are keyed by identity, so their assignment is order-free.
+ for (const p of pinned) {
+ names.set(p.key, p.name);
+ takenNames.add(p.name);
+ addImpliedTwin(takenNames, p.op, p.name);
+ }
+
+ // New ops resolve in identity order for a deterministic accrual.
+ fresh.sort((a, b) => compareStrings(a.key, b.key));
+ const newEntries: SurfaceEntry[] = [];
+ for (const { op, key } of fresh) {
+ const name = proposeName(op, takenNames);
+ names.set(key, name);
+ takenNames.add(name);
+ addImpliedTwin(takenNames, op, name);
+ newEntries.push({ op: displayOp(op), name });
+ }
+
+ const missing: SurfaceEntry[] = [];
+ for (const entry of surfaceEntries) {
+ const parsed = OP_PATTERN.exec(entry.op);
+ if (!parsed) continue;
+ if (!matchedKeys.has(opKey(parsed[1], parsed[2]))) 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';
+}
diff --git a/tests/api-surface.test.ts b/tests/api-surface.test.ts
new file mode 100644
index 0000000..936942d
--- /dev/null
+++ b/tests/api-surface.test.ts
@@ -0,0 +1,665 @@
+/**
+ * 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,
+ 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 the 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, /seed-api-surface\.ts/);
+ 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('throws on duplicate normalized opKey within a spec (param-name churn collapses)', () => {
+ assert.throws(
+ () =>
+ loadYaml(`
+version: 1
+specs:
+ organizations:
+ - op: GET /orgs/{orgId}
+ name: a
+ - op: GET /orgs/{organizationId}
+ name: b
+`),
+ (err: Error) => {
+ assert.match(err.message, /spec "organizations"/);
+ assert.match(err.message, /duplicate operation identity/);
+ 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/);
+ 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.
+ assert.strictEqual(names.get('GET /fieldOperations/{_}'), 'get');
+ assert.deepStrictEqual(newEntries, []);
+ assert.deepStrictEqual(missing, []);
+ });
+
+ 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');
+ });
+});
+
+// ---------------------------------------------------------------------------
+// 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) => ({
+ op: `${op.method.toUpperCase()} ${op.path}`,
+ name: base.get(opKey(op.method, op.path)) 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 }
+ );
+ });
+});
From 0dbe175bd913066fe615e5c0780e917c7933998d Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Wed, 1 Jul 2026 23:48:00 -0500
Subject: [PATCH 06/18] fix(codegen): disambiguate sibling operations differing
only by param name
crop-types declares GET /cropTypes/{name} and GET /cropTypes/{id} as
distinct operations, which collide under normalize-all-params identity.
Entries sharing a normalized key are now legal when their raw paths
differ; matching inside such ambiguous groups is by exact path, so a
param rename there surfaces as a breaking diagnostic instead of a
silent mismatch. Single-sibling groups keep absorbing param renames.
---
scripts/lib/api-surface.ts | 146 +++++++++++++++------
tests/api-surface.test.ts | 253 +++++++++++++++++++++++++++++++++++--
2 files changed, 349 insertions(+), 50 deletions(-)
diff --git a/scripts/lib/api-surface.ts b/scripts/lib/api-surface.ts
index e406b07..0e7ab22 100644
--- a/scripts/lib/api-surface.ts
+++ b/scripts/lib/api-surface.ts
@@ -22,7 +22,9 @@ import * as yaml from 'yaml';
// ============================================================================
export interface SurfaceEntry {
- /** Display form "METHOD /path" with real param names. Matched via normalizePathPattern. */
+ /** 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;
@@ -59,6 +61,9 @@ export function normalizePathPattern(path: string): string {
/**
* 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)}`;
@@ -99,7 +104,8 @@ function describeType(value: unknown): string {
* 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 normalized identity within a spec, a duplicate name within a spec,
+ * 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).
@@ -156,7 +162,7 @@ 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 seenKeys = new Map();
+ const seenOps = new Set();
const seenNames = new Set();
const result: SurfaceEntry[] = [];
@@ -184,15 +190,19 @@ function validateSpecEntries(specName: string, entries: unknown): SurfaceEntry[]
validateName(where, name);
- const key = opKey(parsedOp[1], parsedOp[2]);
- const priorOp = seenKeys.get(key);
- if (priorOp !== undefined) {
+ // 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 identity ${JSON.stringify(key)} from op ${JSON.stringify(op)} ` +
- `(already declared by ${JSON.stringify(priorOp)}); path-param names collapse to the same identity`
+ `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.`
);
}
- seenKeys.set(key, op);
+ seenOps.add(rawOp);
if (seenNames.has(name)) {
fail(
@@ -237,6 +247,15 @@ const HEADER = `# api-surface.yaml
# 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.
@@ -417,13 +436,25 @@ function displayOp(op: SurfaceOp): string {
/**
* Resolve public method names for a spec's operations against the manifest.
*
- * - Pinned: an op whose identity matches a manifest entry gets that name.
- * - missing: manifest entries with no matching op (the breaking signal).
- * - New ops (no entry): proposed in opKey-sorted order, each against the set
- * of pinned names, accrued proposals, and any implied `listAll` twins.
+ * 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.
*
- * The returned `names` map is identical regardless of the input order of
- * `ops`: no positional dependence anywhere.
+ * `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,
@@ -432,52 +463,93 @@ export function resolveMethodNames(
): { names: Map; newEntries: SurfaceEntry[]; missing: SurfaceEntry[] } {
const surfaceEntries = surface.specs[specName] ?? [];
- const entryByKey = new Map();
+ // 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) entryByKey.set(opKey(parsed[1], parsed[2]), entry);
+ 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 names = new Map();
- const takenNames = new Set();
- const matchedKeys = new Set();
-
- const pinned: Array<{ op: SurfaceOp; key: string; name: string }> = [];
- const fresh: Array<{ op: SurfaceOp; key: string }> = [];
+ const opsByKey = new Map();
for (const op of ops) {
const key = opKey(op.method, op.path);
- const entry = entryByKey.get(key);
- if (entry) {
- pinned.push({ op, key, name: entry.name });
- matchedKeys.add(key);
+ 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 {
- fresh.push({ op, key });
+ // 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(p.key, p.name);
+ names.set(displayOp(p.op), p.name);
takenNames.add(p.name);
addImpliedTwin(takenNames, p.op, p.name);
}
- // New ops resolve in identity order for a deterministic accrual.
- fresh.sort((a, b) => compareStrings(a.key, b.key));
+ // 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, key } of fresh) {
+ for (const op of fresh) {
const name = proposeName(op, takenNames);
- names.set(key, name);
+ 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) {
- const parsed = OP_PATTERN.exec(entry.op);
- if (!parsed) continue;
- if (!matchedKeys.has(opKey(parsed[1], parsed[2]))) missing.push(entry);
+ 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 };
diff --git a/tests/api-surface.test.ts b/tests/api-surface.test.ts
index 936942d..2e9caf0 100644
--- a/tests/api-surface.test.ts
+++ b/tests/api-surface.test.ts
@@ -191,21 +191,41 @@ specs:
);
});
- it('throws on duplicate normalized opKey within a spec (param-name churn collapses)', () => {
+ 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:
- organizations:
- - op: GET /orgs/{orgId}
- name: a
- - op: GET /orgs/{organizationId}
- name: b
+ crop-types:
+ - op: GET /cropTypes/{name}
+ name: getA
+ - op: GET /cropTypes/{name}
+ name: getB
`),
(err: Error) => {
- assert.match(err.message, /spec "organizations"/);
- assert.match(err.message, /duplicate operation identity/);
+ assert.match(err.message, /spec "crop-types"/);
+ assert.match(err.message, /duplicate operation/);
return true;
}
);
@@ -315,6 +335,9 @@ describe('serializeApiSurface', () => {
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');
});
@@ -499,11 +522,115 @@ describe('resolveMethodNames', () => {
];
const { names, newEntries, missing } = resolveMethodNames('field-operations-api', ops, surface);
// Heuristic would say getFieldOperations; the manifest pins it to get.
- assert.strictEqual(names.get('GET /fieldOperations/{_}'), '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[] = [
@@ -638,10 +765,11 @@ describe('resolveMethodNames properties', () => {
s = (Math.imul(s, 1664525) + 1013904223) >>> 0;
return s % 2 === 0;
})
- .map((op) => ({
- op: `${op.method.toUpperCase()} ${op.path}`,
- name: base.get(opKey(op.method, op.path)) as string,
- }));
+ .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),
@@ -663,3 +791,102 @@ describe('resolveMethodNames properties', () => {
);
});
});
+
+// ---------------------------------------------------------------------------
+// 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 }
+ );
+ });
+});
From ca4f0da8efb1a7c35f433b64bfcb0a92d12a5035 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 00:09:03 -0500
Subject: [PATCH 07/18] feat(codegen): seed the api-surface manifest from
committed specs
Replay the legacy order-sensitive naming over the committed fixed specs
(still pre-incident path order) to pin every current public method name
to its operation identity. A permanent test loads the manifest and locks
the known-critical bindings so neither hand edits nor auto-appends can
silently move the published surface.
---
scripts/api-surface.yaml | 309 +++++++++++++++++++++++++++++
scripts/seed-api-surface.ts | 130 ++++++++++++
tests/api-surface-manifest.test.ts | 90 +++++++++
3 files changed, 529 insertions(+)
create mode 100644 scripts/api-surface.yaml
create mode 100644 scripts/seed-api-surface.ts
create mode 100644 tests/api-surface-manifest.test.ts
diff --git a/scripts/api-surface.yaml b/scripts/api-surface.yaml
new file mode 100644
index 0000000..6ddcfef
--- /dev/null
+++ b/scripts/api-surface.yaml
@@ -0,0 +1,309 @@
+# 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 /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 /files
+ name: list
+ - op: GET /files/{fileId}
+ name: get
+ - op: GET /organizations/{orgId}/files
+ name: listFiles
+ - op: POST /organizations/{orgId}/files
+ name: create
+ - op: PUT /files/{fileId}
+ name: update
+ flags:
+ - op: DELETE /organizations/{orgId}/flags/{flagId}
+ name: delete
+ - op: GET /organizations/{orgId}/fields/{fieldId}/flags
+ name: list
+ - op: GET /organizations/{orgId}/flags
+ name: getFlags
+ - op: GET /organizations/{orgId}/flags/{flagId}
+ name: get
+ - op: POST /organizations/{orgId}/flags
+ name: create
+ - 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}/locationHistory
+ name: get
+ map-layers:
+ - op: DELETE /mapLayerSummaries/{id}
+ name: delete
+ - op: GET /mapLayerSummaries/{id}
+ name: get
+ - op: GET /organizations/{orgId}/fields/{id}/mapLayerSummaries
+ name: list
+ - op: POST /organizations/{orgId}/fields/{id}/mapLayerSummaries
+ name: create
+ 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 /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 /varieties/{erid}/setOverridesForOrg/{organizationId}
+ name: patch
+ - op: POST /organizations/{organizationId}/varieties
+ name: create
+ - op: POST /varieties/{erid}/associateToOrg/{organizationId}
+ name: createAssociatetoorg
+ - op: PUT /organizations/{organizationId}/varieties/{erid}
+ name: update
+ users:
+ - op: GET /users/{username}
+ name: get
+ webhook:
+ - op: GET /eventSubscriptions
+ name: list
+ - op: GET /eventSubscriptions/{id}
+ name: get
+ - op: POST /eventSubscriptions
+ name: create
+ - op: PUT /eventSubscriptions/{id}
+ name: update
diff --git a/scripts/seed-api-surface.ts b/scripts/seed-api-surface.ts
new file mode 100644
index 0000000..5e331b1
--- /dev/null
+++ b/scripts/seed-api-surface.ts
@@ -0,0 +1,130 @@
+#!/usr/bin/env tsx
+/**
+ * One-time bootstrap: replays the legacy, order-sensitive method-naming
+ * algorithm over the COMMITTED specs/fixed/*.yaml to pin today's public
+ * method names into scripts/api-surface.yaml.
+ *
+ * Refuses to overwrite an existing manifest. Re-seeding later would replay
+ * the legacy algorithm over whatever specs/fixed/*.yaml contains at that
+ * later moment, not the specs that were committed when the manifest was
+ * first pinned. If an upstream path had moved by then, a re-seed would
+ * silently capture a possibly-rebound name instead of the name actually
+ * published today: exactly the incident this pipeline exists to fix.
+ *
+ * Scheduled for deletion together with scripts/lib/legacy-method-names.ts
+ * once a later commit on this branch switches the generator onto the
+ * manifest.
+ *
+ * Usage: pnpm exec tsx scripts/seed-api-surface.ts
+ */
+
+import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
+import { basename, join } from 'node:path';
+import * as yaml from 'yaml';
+import {
+ type ApiSurface,
+ extractOps,
+ loadApiSurface,
+ type SurfaceEntry,
+ serializeApiSurface,
+} from './lib/api-surface.js';
+import { resolveLegacyMethodNames } from './lib/legacy-method-names.js';
+
+const SPECS_DIR = join(process.cwd(), 'specs', 'fixed');
+const SURFACE_PATH = join(process.cwd(), 'scripts', 'api-surface.yaml');
+
+function printRefusal(): void {
+ console.error(
+ `Refusing to overwrite the existing manifest at ${SURFACE_PATH}.\n\n` +
+ 'Re-seeding replays the legacy naming algorithm over whatever ' +
+ 'specs/fixed/*.yaml contains right now, not the specs that were ' +
+ 'committed when the manifest was first pinned. If an upstream path has ' +
+ 'moved since then, a re-seed would silently capture a possibly-rebound ' +
+ 'name instead of the name actually published today, which is the exact ' +
+ 'incident this manifest exists to prevent.\n\n' +
+ 'Hand-edit scripts/api-surface.yaml instead: update the "op:" of the ' +
+ 'affected entry to follow a renamed path, or add an entry for a new ' +
+ 'operation. Pass --force only if a from-scratch reseed is genuinely ' +
+ 'intended.'
+ );
+}
+
+/**
+ * Build one spec's manifest entries by replaying the legacy naming
+ * algorithm over its operations in document order. extractOps preserves the
+ * order operations appear in the spec's `paths` block, which matters because
+ * the legacy naming algorithm resolves collisions by which op it sees first;
+ * this order-fidelity is what makes the seed reproduce today's published
+ * names. serializeApiSurface canonicalizes ordering on write, so the order
+ * these entries are built in has no effect on the written file.
+ */
+function seedSpecEntries(specName: string, spec: unknown): SurfaceEntry[] {
+ const ops = extractOps(spec);
+ const names = resolveLegacyMethodNames(ops);
+
+ return ops.map((op) => {
+ const opDisplay = `${op.method.toUpperCase()} ${op.path}`;
+ const name = names.get(opDisplay);
+ if (!name) {
+ // Cannot happen: resolveLegacyMethodNames names every op it is given,
+ // keyed by this exact string. A miss here means extractOps and
+ // resolveLegacyMethodNames disagree about op identity, a bug worth
+ // failing loudly on rather than writing an incomplete entry.
+ throw new Error(`seed-api-surface: no resolved name for ${opDisplay} in spec "${specName}"`);
+ }
+ return { op: opDisplay, name };
+ });
+}
+
+async function main() {
+ const force = process.argv.includes('--force');
+
+ if (existsSync(SURFACE_PATH) && !force) {
+ printRefusal();
+ process.exitCode = 1;
+ return;
+ }
+
+ if (!existsSync(SPECS_DIR)) {
+ console.error(`Specs directory not found: ${SPECS_DIR}`);
+ console.error('Run `pnpm fetch-specs` and `pnpm fix-specs` first.');
+ process.exitCode = 1;
+ return;
+ }
+
+ // Sort for determinism, same pattern as generate-sdk.ts main().
+ const yamlFiles = readdirSync(SPECS_DIR)
+ .filter((f) => f.endsWith('.yaml'))
+ .sort();
+
+ const specs: Record = {};
+ for (const file of yamlFiles) {
+ const specName = basename(file, '.yaml');
+ const content = readFileSync(join(SPECS_DIR, file), 'utf-8');
+ const spec = yaml.parse(content);
+ specs[specName] = seedSpecEntries(specName, spec);
+ }
+
+ const surface: ApiSurface = { version: 1, specs };
+ writeFileSync(SURFACE_PATH, serializeApiSurface(surface));
+
+ // Self-check: reload the file just written through the same validation
+ // every future consumer goes through. A seeded name the manifest rules
+ // would reject (a stray operationId collision, a reserved word, etc.)
+ // fails loudly here instead of shipping silently.
+ const reloaded = loadApiSurface(SURFACE_PATH);
+
+ console.log(`Wrote ${SURFACE_PATH}\n`);
+ let total = 0;
+ for (const specName of Object.keys(reloaded.specs).sort()) {
+ const count = reloaded.specs[specName].length;
+ total += count;
+ console.log(` ${specName}: ${count} entries`);
+ }
+ console.log(`\nTotal entries: ${total}`);
+}
+
+main().catch((error) => {
+ console.error(error);
+ process.exitCode = 1;
+});
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}`);
+ });
+});
From 542478ac22fcb64241d2935711c330147ed42656 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 00:43:36 -0500
Subject: [PATCH 08/18] feat(codegen)!: generate method names from the
api-surface manifest
The generator now resolves every public method name from the committed
operation-identity registry instead of inferring it from spec document
order. Unknown upstream operations get deterministic proposed names and
are appended to the manifest; a manifest operation missing upstream
fails the run with a per-entry diagnostic before anything is written.
Every run emits sync-report.json (gitignored) for the workflow gate.
Regeneration from committed specs is byte-identical, so the published
surface is unchanged; the legacy order-sensitive naming, its tests, and
the one-time seed script are deleted.
---
scripts/generate-sdk.ts | 105 ++++++++-
scripts/lib/api-surface.ts | 65 ++++++
scripts/lib/legacy-method-names.ts | 72 ------
scripts/seed-api-surface.ts | 130 -----------
tests/api-surface.test.ts | 100 +++++++++
tests/legacy-method-names.test.ts | 345 -----------------------------
6 files changed, 263 insertions(+), 554 deletions(-)
delete mode 100644 scripts/lib/legacy-method-names.ts
delete mode 100644 scripts/seed-api-surface.ts
delete mode 100644 tests/legacy-method-names.test.ts
diff --git a/scripts/generate-sdk.ts b/scripts/generate-sdk.ts
index 7c954be..601d030 100644
--- a/scripts/generate-sdk.ts
+++ b/scripts/generate-sdk.ts
@@ -13,8 +13,14 @@
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { basename, join } from 'node:path';
import * as yaml from 'yaml';
-import { normalizePathPattern } from './lib/api-surface.js';
-import { resolveLegacyMethodNames } from './lib/legacy-method-names.js';
+import {
+ buildSyncReport,
+ loadApiSurface,
+ normalizePathPattern,
+ resolveMethodNames,
+ type SurfaceEntry,
+ serializeApiSurface,
+} from './lib/api-surface.js';
import {
collectionItemType,
computeReturnType,
@@ -525,11 +531,32 @@ ${lines.join('\n')}
}${listAllMethod}`;
}
-function generateApiClass(api: GeneratedApi): string {
- const names = resolveLegacyMethodNames(api.operations);
-
+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) => generateMethod(op, names.get(`${op.method.toUpperCase()} ${op.path}`)!))
+ .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
@@ -904,9 +931,73 @@ async function main() {
`\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`);
diff --git a/scripts/lib/api-surface.ts b/scripts/lib/api-surface.ts
index 0e7ab22..b343090 100644
--- a/scripts/lib/api-surface.ts
+++ b/scripts/lib/api-surface.ts
@@ -568,3 +568,68 @@ export function classifyRun(input: {
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/legacy-method-names.ts b/scripts/lib/legacy-method-names.ts
deleted file mode 100644
index 087a0f2..0000000
--- a/scripts/lib/legacy-method-names.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Legacy order-sensitive method naming, extracted verbatim from
- * generate-sdk.ts for the one-time api-surface manifest seed.
- *
- * Used only by scripts/seed-api-surface.ts. Scheduled for deletion once the
- * manifest lands. Do not use for live generation.
- */
-
-import { toCamelCase, toPascalCase } from './spec-utils.js';
-
-export interface LegacyNamedOp {
- operationId: string;
- method: 'get' | 'post' | 'put' | 'patch' | 'delete';
- path: string;
- isCollection: boolean;
-}
-
-export function inferLegacyMethodName(op: LegacyNamedOp): 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`);
-}
-
-export function resolveLegacyMethodNames(ops: LegacyNamedOp[]): Map {
- const usedMethodNames = new Set();
- const names = new Map();
-
- for (const op of ops) {
- let methodName = inferLegacyMethodName(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);
-
- names.set(`${op.method.toUpperCase()} ${op.path}`, methodName);
- }
-
- return names;
-}
diff --git a/scripts/seed-api-surface.ts b/scripts/seed-api-surface.ts
deleted file mode 100644
index 5e331b1..0000000
--- a/scripts/seed-api-surface.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env tsx
-/**
- * One-time bootstrap: replays the legacy, order-sensitive method-naming
- * algorithm over the COMMITTED specs/fixed/*.yaml to pin today's public
- * method names into scripts/api-surface.yaml.
- *
- * Refuses to overwrite an existing manifest. Re-seeding later would replay
- * the legacy algorithm over whatever specs/fixed/*.yaml contains at that
- * later moment, not the specs that were committed when the manifest was
- * first pinned. If an upstream path had moved by then, a re-seed would
- * silently capture a possibly-rebound name instead of the name actually
- * published today: exactly the incident this pipeline exists to fix.
- *
- * Scheduled for deletion together with scripts/lib/legacy-method-names.ts
- * once a later commit on this branch switches the generator onto the
- * manifest.
- *
- * Usage: pnpm exec tsx scripts/seed-api-surface.ts
- */
-
-import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
-import { basename, join } from 'node:path';
-import * as yaml from 'yaml';
-import {
- type ApiSurface,
- extractOps,
- loadApiSurface,
- type SurfaceEntry,
- serializeApiSurface,
-} from './lib/api-surface.js';
-import { resolveLegacyMethodNames } from './lib/legacy-method-names.js';
-
-const SPECS_DIR = join(process.cwd(), 'specs', 'fixed');
-const SURFACE_PATH = join(process.cwd(), 'scripts', 'api-surface.yaml');
-
-function printRefusal(): void {
- console.error(
- `Refusing to overwrite the existing manifest at ${SURFACE_PATH}.\n\n` +
- 'Re-seeding replays the legacy naming algorithm over whatever ' +
- 'specs/fixed/*.yaml contains right now, not the specs that were ' +
- 'committed when the manifest was first pinned. If an upstream path has ' +
- 'moved since then, a re-seed would silently capture a possibly-rebound ' +
- 'name instead of the name actually published today, which is the exact ' +
- 'incident this manifest exists to prevent.\n\n' +
- 'Hand-edit scripts/api-surface.yaml instead: update the "op:" of the ' +
- 'affected entry to follow a renamed path, or add an entry for a new ' +
- 'operation. Pass --force only if a from-scratch reseed is genuinely ' +
- 'intended.'
- );
-}
-
-/**
- * Build one spec's manifest entries by replaying the legacy naming
- * algorithm over its operations in document order. extractOps preserves the
- * order operations appear in the spec's `paths` block, which matters because
- * the legacy naming algorithm resolves collisions by which op it sees first;
- * this order-fidelity is what makes the seed reproduce today's published
- * names. serializeApiSurface canonicalizes ordering on write, so the order
- * these entries are built in has no effect on the written file.
- */
-function seedSpecEntries(specName: string, spec: unknown): SurfaceEntry[] {
- const ops = extractOps(spec);
- const names = resolveLegacyMethodNames(ops);
-
- return ops.map((op) => {
- const opDisplay = `${op.method.toUpperCase()} ${op.path}`;
- const name = names.get(opDisplay);
- if (!name) {
- // Cannot happen: resolveLegacyMethodNames names every op it is given,
- // keyed by this exact string. A miss here means extractOps and
- // resolveLegacyMethodNames disagree about op identity, a bug worth
- // failing loudly on rather than writing an incomplete entry.
- throw new Error(`seed-api-surface: no resolved name for ${opDisplay} in spec "${specName}"`);
- }
- return { op: opDisplay, name };
- });
-}
-
-async function main() {
- const force = process.argv.includes('--force');
-
- if (existsSync(SURFACE_PATH) && !force) {
- printRefusal();
- process.exitCode = 1;
- return;
- }
-
- if (!existsSync(SPECS_DIR)) {
- console.error(`Specs directory not found: ${SPECS_DIR}`);
- console.error('Run `pnpm fetch-specs` and `pnpm fix-specs` first.');
- process.exitCode = 1;
- return;
- }
-
- // Sort for determinism, same pattern as generate-sdk.ts main().
- const yamlFiles = readdirSync(SPECS_DIR)
- .filter((f) => f.endsWith('.yaml'))
- .sort();
-
- const specs: Record = {};
- for (const file of yamlFiles) {
- const specName = basename(file, '.yaml');
- const content = readFileSync(join(SPECS_DIR, file), 'utf-8');
- const spec = yaml.parse(content);
- specs[specName] = seedSpecEntries(specName, spec);
- }
-
- const surface: ApiSurface = { version: 1, specs };
- writeFileSync(SURFACE_PATH, serializeApiSurface(surface));
-
- // Self-check: reload the file just written through the same validation
- // every future consumer goes through. A seeded name the manifest rules
- // would reject (a stray operationId collision, a reserved word, etc.)
- // fails loudly here instead of shipping silently.
- const reloaded = loadApiSurface(SURFACE_PATH);
-
- console.log(`Wrote ${SURFACE_PATH}\n`);
- let total = 0;
- for (const specName of Object.keys(reloaded.specs).sort()) {
- const count = reloaded.specs[specName].length;
- total += count;
- console.log(` ${specName}: ${count} entries`);
- }
- console.log(`\nTotal entries: ${total}`);
-}
-
-main().catch((error) => {
- console.error(error);
- process.exitCode = 1;
-});
diff --git a/tests/api-surface.test.ts b/tests/api-surface.test.ts
index 2e9caf0..d204c97 100644
--- a/tests/api-surface.test.ts
+++ b/tests/api-surface.test.ts
@@ -19,6 +19,7 @@ import { describe, it } from 'node:test';
import * as fc from 'fast-check';
import {
type ApiSurface,
+ buildSyncReport,
classifyRun,
extractOps,
loadApiSurface,
@@ -688,6 +689,105 @@ describe('classifyRun', () => {
});
});
+// ---------------------------------------------------------------------------
+// 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)
// ---------------------------------------------------------------------------
diff --git a/tests/legacy-method-names.test.ts b/tests/legacy-method-names.test.ts
deleted file mode 100644
index b34ecb7..0000000
--- a/tests/legacy-method-names.test.ts
+++ /dev/null
@@ -1,345 +0,0 @@
-import assert from 'node:assert';
-import { describe, it } from 'node:test';
-import {
- inferLegacyMethodName,
- type LegacyNamedOp,
- resolveLegacyMethodNames,
-} from '../scripts/lib/legacy-method-names.js';
-
-describe('legacy-method-names', () => {
- describe('inferLegacyMethodName: operationId heuristics', () => {
- it('getall* maps to list', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'getAllWidgets',
- method: 'get',
- path: '/widgets',
- isCollection: true,
- }),
- 'list'
- );
- });
-
- it('list* maps to list', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'listFields',
- method: 'get',
- path: '/fields',
- isCollection: true,
- }),
- 'list'
- );
- });
-
- it('/^get[a-z]+s$/ maps to list', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'getFields',
- method: 'get',
- path: '/fields',
- isCollection: true,
- }),
- 'list'
- );
- });
-
- it('get* (no "all") maps to get', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'getField',
- method: 'get',
- path: '/fields/{id}',
- isCollection: false,
- }),
- 'get'
- );
- });
-
- it('get* containing "all" anywhere is excluded from the get branch by the includes("all") guard', () => {
- // Preserved quirk: the guard is `!id.includes('all')`, not a narrower
- // `!id.startsWith('getall')`. isCollection: true makes this
- // discriminating: if the guard were broken this would incorrectly
- // return 'get' instead of falling through to the HTTP-method
- // fallback's 'list'.
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'getFallbackField',
- method: 'get',
- path: '/fallbackFields',
- isCollection: true,
- }),
- 'list'
- );
- });
-
- it('create* maps to create', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'createWidget',
- method: 'post',
- path: '/widgets',
- isCollection: false,
- }),
- 'create'
- );
- });
-
- it('post* (not containing "get") maps to create', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'postWidget',
- method: 'post',
- path: '/widgets',
- isCollection: false,
- }),
- 'create'
- );
- });
-
- it('update* maps to update', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'updateWidget',
- method: 'put',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'update'
- );
- });
-
- it('put* maps to update', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'putWidget',
- method: 'put',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'update'
- );
- });
-
- it('delete* maps to delete', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'deleteWidget',
- method: 'delete',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'delete'
- );
- });
-
- it('remove* maps to delete', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: 'removeWidget',
- method: 'delete',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'delete'
- );
- });
- });
-
- describe('inferLegacyMethodName: HTTP-method fallback (operationId matches no heuristic)', () => {
- it('get + isCollection -> list', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'get',
- path: '/widgets',
- isCollection: true,
- }),
- 'list'
- );
- });
-
- it('get + item -> get', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'get',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'get'
- );
- });
-
- it('post -> create', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'post',
- path: '/widgets',
- isCollection: false,
- }),
- 'create'
- );
- });
-
- it('put -> update', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'put',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'update'
- );
- });
-
- it('patch -> patch', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'patch',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'patch'
- );
- });
-
- it('delete -> delete', () => {
- assert.strictEqual(
- inferLegacyMethodName({
- operationId: '',
- method: 'delete',
- path: '/widgets/{id}',
- isCollection: false,
- }),
- 'delete'
- );
- });
- });
-
- describe('resolveLegacyMethodNames: collision and order sensitivity', () => {
- // The real incident shapes: two item endpoints that both infer the bare
- // 'get' name (operationId left blank so the HTTP-method fallback fires
- // for both). Real toPascalCase semantics lowercase interior caps, so
- // /fieldOps/{id} suffixes to "Fieldops", not "FieldOps".
- const fieldOperationsOp: LegacyNamedOp = {
- operationId: '',
- method: 'get',
- path: '/fieldOperations/{operationId}',
- isCollection: false,
- };
- const fieldOpsOp: LegacyNamedOp = {
- operationId: '',
- method: 'get',
- path: '/fieldOps/{operationId}',
- isCollection: false,
- };
-
- it('two ops both inferring get: the second gets a PascalCased last-non-param-segment suffix', () => {
- const names = resolveLegacyMethodNames([fieldOperationsOp, fieldOpsOp]);
- assert.strictEqual(names.get('GET /fieldOperations/{operationId}'), 'get');
- assert.strictEqual(names.get('GET /fieldOps/{operationId}'), 'getFieldops');
- });
-
- // ORDER SENSITIVITY (deliberate): this test freezes the bug this branch
- // exists to remove. It documents CURRENT behavior only. Feeding the
- // same two colliding ops in reversed order silently swaps which one
- // gets the bare 'get' name. This test (and the module it tests) is
- // deleted once the manifest-based naming lands in a later commit.
- it('reversing input order swaps which op gets the bare name', () => {
- const names = resolveLegacyMethodNames([fieldOpsOp, fieldOperationsOp]);
- assert.strictEqual(names.get('GET /fieldOps/{operationId}'), 'get');
- assert.strictEqual(names.get('GET /fieldOperations/{operationId}'), 'getFieldoperations');
- });
- });
-
- describe('resolveLegacyMethodNames: cumulative counter quirk', () => {
- it('a third collision on the same base+suffix appends the counter cumulatively (getX, getX2, getX23)', () => {
- // Preserved quirk: the while-loop counter appends to the
- // already-suffixed methodName each iteration rather than restarting
- // from the base+suffix, so a third collision on the same pair
- // produces "getX23", not "getX3".
- const ops: LegacyNamedOp[] = [
- // Claims the bare 'get' name so the next three all collide.
- { operationId: '', method: 'get', path: '/seed/{id}', isCollection: false },
- // All three share the same last-non-param segment ("x"), so they
- // all suffix to the same "X" and collide with each other in turn.
- { operationId: '', method: 'get', path: '/a/{aId}/x/{xId}', isCollection: false },
- { operationId: '', method: 'get', path: '/b/{bId}/x/{xId}', isCollection: false },
- { operationId: '', method: 'get', path: '/c/{cId}/x/{xId}', isCollection: false },
- ];
-
- const names = resolveLegacyMethodNames(ops);
-
- assert.strictEqual(names.get('GET /seed/{id}'), 'get');
- assert.strictEqual(names.get('GET /a/{aId}/x/{xId}'), 'getX');
- assert.strictEqual(names.get('GET /b/{bId}/x/{xId}'), 'getX2');
- assert.strictEqual(names.get('GET /c/{cId}/x/{xId}'), 'getX23');
- });
- });
-
- describe('resolveLegacyMethodNames: real equipment.yaml collision chain', () => {
- // Reproduces the exact operationIds and paths declared in
- // specs/fixed/equipment.yaml, in file order, verified against the
- // committed src/api/equipment.ts. GET /equipment and GET /equipment/{id}
- // have no operationId in the spec, so parseSpec's synthesized fallback
- // ("get" + path letters only) applies. GET /equipmentMakes is not one of
- // the five asserted names below. It is required scaffolding: it is
- // what claims the bare 'list' name first, which is why GET
- // /equipmentISGTypes collides into 'listEquipmentisgtypes' instead of
- // staying 'list'.
- it('locks in the five real method names shipped in src/api/equipment.ts', () => {
- const ops: LegacyNamedOp[] = [
- { operationId: 'getequipment', method: 'get', path: '/equipment', isCollection: true },
- {
- operationId: 'getequipmentid',
- method: 'get',
- path: '/equipment/{id}',
- isCollection: false,
- },
- {
- operationId: 'getEquipmentMakes',
- method: 'get',
- path: '/equipmentMakes',
- isCollection: true,
- },
- {
- operationId: 'getEquipmentISGTypes',
- method: 'get',
- path: '/equipmentISGTypes',
- isCollection: true,
- },
- {
- operationId: 'getEquipmentISGTypesByMakeId',
- method: 'get',
- path: '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes',
- isCollection: true,
- },
- {
- operationId: 'getEquipmentISGTypeByMakeIdAndISGTypeId',
- method: 'get',
- path: '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}',
- isCollection: false,
- },
- ];
-
- const names = resolveLegacyMethodNames(ops);
-
- assert.strictEqual(names.get('GET /equipment'), 'get');
- assert.strictEqual(names.get('GET /equipment/{id}'), 'getEquipment');
- assert.strictEqual(names.get('GET /equipmentMakes'), 'list');
- assert.strictEqual(names.get('GET /equipmentISGTypes'), 'listEquipmentisgtypes');
- assert.strictEqual(
- names.get('GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes'),
- 'getEquipmentisgtypes'
- );
- assert.strictEqual(
- names.get('GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}'),
- 'getEquipmentisgtypes2'
- );
- });
- });
-});
From eca60d7dc6cbb5f18151686471e6908f4b2cca00 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 01:10:06 -0500
Subject: [PATCH 09/18] feat(codegen): add spec canonicalization library
Sorts the paths map and every components category map so semantically
null upstream reorders produce byte-identical spec files at the fetch
boundary. Stringification matches fix-specs' emission options plus
aliasDuplicateObjects: false, so deduplicated merged components can
never surface as YAML anchors.
---
scripts/lib/spec-canonicalize.ts | 102 ++++++++
tests/spec-canonicalize.test.ts | 431 +++++++++++++++++++++++++++++++
2 files changed, 533 insertions(+)
create mode 100644 scripts/lib/spec-canonicalize.ts
create mode 100644 tests/spec-canonicalize.test.ts
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/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'));
+ });
+});
From da8d9ee3eac34a443658bb70db731e1df54777b8 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 01:46:10 -0500
Subject: [PATCH 10/18] feat(codegen): add multi-document spec validation and
structural merge
The portal returns multiple documents for 7 of 28 slugs; the fetch
keeps element zero and silently drops the rest. Validate every element
and structurally merge a slug's documents: repo-owned primary table
(never portal array order), method-level path union with deep-equal
dedupe, component conflict renames with subtree ref rewriting to a
fixpoint, server agreement checks, and source-document stamping.
check-api-health now checks every returned document.
---
scripts/check-api-health.ts | 10 +-
scripts/lib/fetched-spec-utils.ts | 64 +++
scripts/lib/spec-merge.ts | 545 ++++++++++++++++++++++++
tests/fetched-spec-utils.test.ts | 77 +++-
tests/spec-merge.test.ts | 680 ++++++++++++++++++++++++++++++
5 files changed, 1373 insertions(+), 3 deletions(-)
create mode 100644 scripts/lib/spec-merge.ts
create mode 100644 tests/spec-merge.test.ts
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/lib/fetched-spec-utils.ts b/scripts/lib/fetched-spec-utils.ts
index 27d7a9c..6a002a3 100644
--- a/scripts/lib/fetched-spec-utils.ts
+++ b/scripts/lib/fetched-spec-utils.ts
@@ -8,6 +8,14 @@ export interface ValidatedFetchedSpec {
ymlContent: string;
}
+export interface ValidatedFetchedDoc {
+ slug: string;
+ id: number;
+ name: string;
+ endPointName: string;
+ ymlContent: string;
+}
+
function isRecord(value: unknown): value is Record {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
@@ -67,3 +75,59 @@ export function validateFetchedSpec(
ymlContent: redactSpecContent(ymlContent),
};
}
+
+/**
+ * Validate EVERY document the portal returns for a slug (7 of 28 slugs return
+ * more than one). Same slug-allowlist guard as validateFetchedSpec; the 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 exactly as the single-doc path does. 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
+): ValidatedFetchedDoc[] | null {
+ if (!allowedSlugs.has(slug)) {
+ throw new Error(`Unexpected API slug: ${slug}`);
+ }
+
+ if (!Array.isArray(responseBody) || responseBody.length === 0) {
+ return null;
+ }
+
+ const docs: ValidatedFetchedDoc[] = [];
+ for (const element of responseBody) {
+ if (!isRecord(element)) {
+ 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 docs;
+}
diff --git a/scripts/lib/spec-merge.ts b/scripts/lib/spec-merge.ts
new file mode 100644
index 0000000..c06faaa
--- /dev/null
+++ b/scripts/lib/spec-merge.ts
@@ -0,0 +1,545 @@
+/**
+ * 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;
+}
+
+// ---------------------------------------------------------------------------
+// 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;
+ }
+}
+
+function applyServers(
+ slug: string,
+ merged: Record,
+ docs: readonly OrderedDoc[]
+): void {
+ const declared = 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 (declared.length === 0) return;
+
+ const reference = declared[0];
+ for (const other of declared.slice(1)) {
+ if (!deepEqualUnordered(other.servers, reference.servers)) {
+ throw new Error(
+ `mergeSpecDocs: slug "${slug}": documents "${reference.endPointName}" and ` +
+ `"${other.endPointName}" declare different servers blocks. All declaring ` +
+ `documents must agree; a human must reconcile them.`
+ );
+ }
+ }
+ 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);
+ 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/tests/fetched-spec-utils.test.ts b/tests/fetched-spec-utils.test.ts
index 35f8871..0543b0d 100644
--- a/tests/fetched-spec-utils.test.ts
+++ b/tests/fetched-spec-utils.test.ts
@@ -1,6 +1,10 @@
import assert from 'node:assert';
import { describe, it } from 'node:test';
-import { normalizeSpecContent, validateFetchedSpec } from '../scripts/lib/fetched-spec-utils.js';
+import {
+ normalizeSpecContent,
+ validateFetchedSpec,
+ validateFetchedSpecDocs,
+} from '../scripts/lib/fetched-spec-utils.js';
const allowedSlugs = new Set(['fields']);
@@ -63,4 +67,75 @@ describe('fetched spec utilities', () => {
);
});
});
+
+ 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 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('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 invalid OpenAPI content', () => {
+ const body = [
+ element(1, 'varieties', varietiesYml),
+ element(2, 'chemicals', 'info:\n title: No version\npaths: {}\n'),
+ ];
+ assert.strictEqual(validateFetchedSpecDocs('products', body, 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(
+ () => validateFetchedSpecDocs('not-a-local-slug', [], multiAllowed),
+ /Unexpected API slug/
+ );
+ });
+ });
});
diff --git a/tests/spec-merge.test.ts b/tests/spec-merge.test.ts
new file mode 100644
index 0000000..76d2845
--- /dev/null
+++ b/tests/spec-merge.test.ts
@@ -0,0 +1,680 @@
+/**
+ * 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('throws when two docs declare conflicting servers, naming both endpoints', () => {
+ 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`
+ );
+ }
+ });
+});
From d97f09c93b05d3078ad3d91a465bb98ca27b6c5a Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 02:54:51 -0500
Subject: [PATCH 11/18] feat(codegen): fetch consumes every portal document per
slug
fetch-specs validates all returned documents, structurally merges
multi-document slugs through the repo-owned primary table, and writes
canonicalized YAML so upstream reorders produce byte-identical raw
files. The single-document validator is retired; summary.json records
the merged document inventory per slug.
---
scripts/fetch-specs.ts | 162 +++++++++++++++++++++++++-----
scripts/lib/fetched-spec-utils.ts | 50 ++-------
tests/fetched-spec-utils.test.ts | 96 ++++++++----------
3 files changed, 184 insertions(+), 124 deletions(-)
diff --git a/scripts/fetch-specs.ts b/scripts/fetch-specs.ts
index 0afc92a..75479df 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,46 +154,81 @@ 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) : 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');
}
diff --git a/scripts/lib/fetched-spec-utils.ts b/scripts/lib/fetched-spec-utils.ts
index 6a002a3..30df38f 100644
--- a/scripts/lib/fetched-spec-utils.ts
+++ b/scripts/lib/fetched-spec-utils.ts
@@ -1,13 +1,6 @@
import * as yaml from 'yaml';
import { redactSpecContent } from './spec-redactor.js';
-export interface ValidatedFetchedSpec {
- slug: string;
- id: number;
- name: string;
- ymlContent: string;
-}
-
export interface ValidatedFetchedDoc {
slug: string;
id: number;
@@ -44,45 +37,14 @@ export function normalizeSpecContent(content: string): string {
return content.replace(/\r\n/g, '\n');
}
-export function validateFetchedSpec(
- slug: string,
- responseBody: unknown,
- allowedSlugs: ReadonlySet
-): ValidatedFetchedSpec | null {
- if (!allowedSlugs.has(slug)) {
- throw new Error(`Unexpected API slug: ${slug}`);
- }
-
- if (!Array.isArray(responseBody) || !isRecord(responseBody[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 ymlContent = normalizeSpecContent(yml_content);
- if (ymlContent.trim().length === 0 || !isOpenApiDocument(ymlContent)) {
- return null;
- }
-
- return {
- slug,
- id,
- name,
- ymlContent: redactSpecContent(ymlContent),
- };
-}
-
/**
* Validate EVERY document the portal returns for a slug (7 of 28 slugs return
- * more than one). Same slug-allowlist guard as validateFetchedSpec; the 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 exactly as the single-doc path does. ANY invalid element fails the
+ * 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(
diff --git a/tests/fetched-spec-utils.test.ts b/tests/fetched-spec-utils.test.ts
index 0543b0d..9a367ad 100644
--- a/tests/fetched-spec-utils.test.ts
+++ b/tests/fetched-spec-utils.test.ts
@@ -2,22 +2,9 @@ import assert from 'node:assert';
import { describe, it } from 'node:test';
import {
normalizeSpecContent,
- validateFetchedSpec,
validateFetchedSpecDocs,
} 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,
- },
- ];
-}
-
describe('fetched spec utilities', () => {
describe('normalizeSpecContent', () => {
it('normalizes CRLF line endings to LF', () => {
@@ -28,46 +15,6 @@ 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",
- });
- });
-
- 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('rejects empty or invalid OpenAPI content', () => {
- assert.strictEqual(validateFetchedSpec('fields', validResponse(''), allowedSlugs), null);
- assert.strictEqual(
- validateFetchedSpec('fields', validResponse('openapi: [\n'), allowedSlugs),
- null
- );
- assert.strictEqual(
- validateFetchedSpec(
- 'fields',
- validResponse('info:\n title: Missing version\npaths: {}\n'),
- allowedSlugs
- ),
- null
- );
- });
-
- it('throws on slugs outside the trusted local catalog', () => {
- assert.throws(
- () => validateFetchedSpec('not-a-local-slug', validResponse(), allowedSlugs),
- /Unexpected API slug/
- );
- });
- });
-
describe('validateFetchedSpecDocs', () => {
const multiAllowed = new Set(['products']);
const varietiesYml = "openapi: '3.0.0'\ninfo:\n title: Varieties\npaths: {}\n";
@@ -82,6 +29,20 @@ describe('fetched spec utilities', () => {
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('validates every element, captures endPointName, and applies redaction', () => {
const body = [element(1, 'varieties', varietiesYml), element(2, 'chemicals', chemicalsYml)];
const result = validateFetchedSpecDocs('products', body, multiAllowed);
@@ -114,14 +75,39 @@ describe('fetched spec utilities', () => {
assert.strictEqual(validateFetchedSpecDocs('products', body, multiAllowed), null);
});
- it('fails the slug (null) when one element has invalid OpenAPI content', () => {
+ it('fails the slug (null) when one element has an invalid field type', () => {
const body = [
element(1, 'varieties', varietiesYml),
- element(2, 'chemicals', 'info:\n title: No version\npaths: {}\n'),
+ { 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(
+ validateFetchedSpecDocs('products', bodyWith('openapi: [\n'), multiAllowed),
+ null
+ );
+ assert.strictEqual(
+ 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);
});
From 317e1128eac71949c11a8ea0aee4a0e4d346db95 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 03:26:26 -0500
Subject: [PATCH 12/18] chore(specs): canonicalize committed spec key order
Rewrite specs/raw and everything downstream through the canonical
paths/components ordering that fetch-specs now emits, so future live
fetches diff cleanly and upstream reorders vanish. Every path in every
spec changes position while scripts/api-surface.yaml is byte-identical,
which is this branch's reorder-immunity proof executed against the
real spec corpus.
---
package.json | 1 +
scripts/canonicalize-specs.ts | 64 +
specs/fixed/assets.yaml | 1300 ++---
specs/fixed/boundaries.yaml | 1098 ++--
specs/fixed/clients.yaml | 552 +-
specs/fixed/connection-management.yaml | 52 +-
specs/fixed/crop-types.yaml | 74 +-
specs/fixed/equipment-measurement.yaml | 222 +-
specs/fixed/equipment.yaml | 4484 +++++++--------
specs/fixed/farms.yaml | 320 +-
specs/fixed/field-operations-api.yaml | 3004 +++++-----
specs/fixed/fields.yaml | 1208 ++--
specs/fixed/files.yaml | 456 +-
specs/fixed/flags.yaml | 370 +-
specs/fixed/guidance-lines.yaml | 118 +-
specs/fixed/harvest-id.yaml | 282 +-
specs/fixed/machine-alerts.yaml | 342 +-
specs/fixed/machine-device-state-reports.yaml | 64 +-
specs/fixed/machine-engine-hours.yaml | 52 +-
specs/fixed/machine-hours-of-operation.yaml | 60 +-
specs/fixed/machine-locations.yaml | 14 +-
specs/fixed/map-layers.yaml | 890 +--
specs/fixed/notifications.yaml | 308 +-
specs/fixed/operators.yaml | 78 +-
specs/fixed/organizations.yaml | 92 +-
specs/fixed/partnerships.yaml | 200 +-
specs/fixed/products.yaml | 796 +--
specs/fixed/webhook.yaml | 444 +-
specs/raw/aemp.yaml | 302 +-
specs/raw/assets.yaml | 1880 +++---
specs/raw/boundaries.yaml | 2070 ++++---
specs/raw/clients.yaml | 1010 ++--
specs/raw/connection-management.yaml | 186 +-
specs/raw/crop-types.yaml | 777 ++-
specs/raw/equipment-measurement.yaml | 762 ++-
specs/raw/equipment.yaml | 5113 +++++++++--------
specs/raw/farms.yaml | 820 ++-
specs/raw/field-operations-api.yaml | 4378 +++++++-------
specs/raw/fields.yaml | 2392 ++++----
specs/raw/files.yaml | 1149 ++--
specs/raw/flags.yaml | 909 +--
specs/raw/guidance-lines.yaml | 712 ++-
specs/raw/harvest-id.yaml | 771 ++-
specs/raw/machine-alerts.yaml | 590 +-
specs/raw/machine-device-state-reports.yaml | 477 +-
specs/raw/machine-engine-hours.yaml | 217 +-
specs/raw/machine-hours-of-operation.yaml | 242 +-
specs/raw/machine-locations.yaml | 196 +-
specs/raw/map-layers.yaml | 1747 +++---
specs/raw/notifications.yaml | 837 +--
specs/raw/operators.yaml | 389 +-
specs/raw/organizations.yaml | 395 +-
specs/raw/partnerships.yaml | 716 ++-
specs/raw/products.yaml | 1974 ++++---
specs/raw/users.yaml | 116 +-
specs/raw/webhook.yaml | 1028 ++--
src/api/assets.ts | 104 +-
src/api/boundaries.ts | 54 +-
src/api/clients.ts | 44 +-
src/api/crop-types.ts | 20 +-
src/api/equipment.ts | 270 +-
src/api/farms.ts | 46 +-
src/api/field-operations-api.ts | 120 +-
src/api/fields.ts | 42 +-
src/api/flags.ts | 148 +-
src/api/map-layers.ts | 56 +-
src/api/notifications.ts | 26 +-
src/api/products.ts | 38 +-
src/types/generated/assets.ts | 512 +-
src/types/generated/boundaries.ts | 950 +--
src/types/generated/clients.ts | 326 +-
src/types/generated/connection-management.ts | 42 +-
src/types/generated/crop-types.ts | 60 +-
src/types/generated/equipment-measurement.ts | 170 +-
src/types/generated/equipment.ts | 2772 ++++-----
src/types/generated/farms.ts | 244 +-
src/types/generated/field-operations-api.ts | 2172 +++----
src/types/generated/fields.ts | 728 +--
src/types/generated/files.ts | 260 +-
src/types/generated/flags.ts | 298 +-
src/types/generated/guidance-lines.ts | 82 +-
src/types/generated/harvest-id.ts | 274 +-
src/types/generated/machine-alerts.ts | 228 +-
.../generated/machine-device-state-reports.ts | 24 +-
src/types/generated/machine-engine-hours.ts | 38 +-
.../generated/machine-hours-of-operation.ts | 40 +-
src/types/generated/map-layers.ts | 658 +--
src/types/generated/notifications.ts | 252 +-
src/types/generated/operators.ts | 42 +-
src/types/generated/organizations.ts | 66 +-
src/types/generated/partnerships.ts | 122 +-
src/types/generated/products.ts | 664 +--
src/types/generated/webhook.ts | 312 +-
93 files changed, 30460 insertions(+), 30944 deletions(-)
create mode 100644 scripts/canonicalize-specs.ts
diff --git a/package.json b/package.json
index 7e333ab..036f110 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/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/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 d02ffb1..62c8031 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,1636 +371,438 @@ 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:
+ 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"
- 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:
- type: "string"
- example:
- - "equipmentModels"
- - "recordMetadata"
- 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
+ - "equipmentModels"
+ - "recordMetadata"
+ enum:
+ - "equipmentModels"
+ - "recordMetadata"
id:
name: "id"
in: "path"
@@ -2158,202 +811,46 @@ components:
type: "integer"
format: "int32"
example: 1111
- organizationId:
- name: "organizationId"
- in: "path"
- x-required-boolean: true
- 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"
+ organizationId:
+ name: "organizationId"
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:
@@ -2716,6 +1213,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:
@@ -2741,267 +1274,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..2b4b3e3 100644
--- a/specs/fixed/field-operations-api.yaml
+++ b/specs/fixed/field-operations-api.yaml
@@ -18,30 +18,6 @@ servers:
- "partnerapiqa"
- "sandboxapiqa"
paths:
- /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"
/fieldOperations/{operationId}:
get:
summary: "View a Field Operation"
@@ -84,64 +60,47 @@ 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
- schema:
- type: "string"
- format: "int64"
- example: 12345
- FieldId:
- name: "fieldId"
- in: "path"
- x-required-boolean: true
- description: "Field ID"
- schema:
- type: "string"
- format: "guid"
- example: "d01111d6-1fa4-4659-943a-3df4a6b7933c"
- OperationId:
- name: "operationId"
- in: "path"
- x-required-boolean: true
- description: "Operation ID"
+ 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: "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: "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"
- 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: "VOLUME"
CompareType:
in: "path"
x-required-boolean: true
@@ -151,56 +110,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 +131,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 +139,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 +178,55 @@ components:
type: "string"
enum:
- "machine"
- FieldOperationLayerLegendEmbed:
+ 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"
+ 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"
+ OperationId:
+ name: "operationId"
+ in: "path"
+ x-required-boolean: true
+ description: "Operation ID"
+ schema:
+ type: "string"
+ example: "MTIzNF81NjFiZGY1"
OperationIds:
name: "operationIds"
in: "query"
@@ -331,27 +237,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 +351,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 +458,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 +476,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:
+ $ref: "#/components/schemas/UpdateFieldOperation"
+ responses:
+ CreatedWorkNote:
+ description: "Created work note"
+ headers:
+ Location:
+ description: "The uri of the newly created resource"
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"
+ 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 +512,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 +540,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 +550,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 +559,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,54 +689,156 @@ 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:
- application/vnd.deere.axiom.v3+json:
+ image/png:
+ x-zally-ignore:
+ - "D005"
+ - "D012"
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"
+ 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"
+ $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: 10
+ example: 70
values:
- type: "array"
- items:
- $ref: "#/components/schemas/FieldOperationWorkNote"
- FieldOperationWorkNote:
- description: "A field operation work note object"
+ $ref: "#/components/schemas/FieldOperationLayerStatistics"
+ FieldOperationLayers:
+ description: "An Object of Field Operation Layers"
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: "#/components/schemas/FieldOperationWorkNote"
- FieldOperationMeasurements:
- description: "A collection of Field Operation Measurements"
+ 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:
+ $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 +856,7 @@ components:
values:
type: "array"
items:
- $ref: "#/components/schemas/FieldOperationMeasurement"
+ $ref: "#/components/schemas/FieldOperationMachine"
FieldOperationMeasurementOrImage:
description: "An object of Field Operation Measurements or image"
content:
@@ -820,8 +869,8 @@ components:
application/vnd.deere.axiom.v3.location+tif+json:
schema:
$ref: "#/components/schemas/FieldOperationGeoTIFFLocation"
- FieldOperationLayerStatistics:
- description: "An Object of Field Operation Statistics"
+ FieldOperationMeasurements:
+ description: "A collection of Field Operation Measurements"
content:
application/vnd.deere.axiom.v3+json:
schema:
@@ -837,9 +886,17 @@ components:
format: "int64"
example: 70
values:
- $ref: "#/components/schemas/FieldOperationLayerStatistics"
- FieldOperationDataAnalysisStatistics:
- description: "Field Operation Statistics broken down according to the legend for another context."
+ type: "array"
+ items:
+ $ref: "#/components/schemas/FieldOperationMeasurement"
+ 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:
@@ -853,64 +910,13 @@ components:
description: "Number of results in the list"
type: "integer"
format: "int64"
- example: 70
+ example: 10
values:
type: "array"
items:
- $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"
- FieldOperationLayers:
- description: "An Object of Field Operation Layers"
+ $ref: "#/components/schemas/FieldOperationWorkNote"
+ FieldOperations:
+ description: "A collection of field operations"
content:
application/vnd.deere.axiom.v3+json:
schema:
@@ -919,297 +925,348 @@ components:
links:
type: "array"
items:
- $ref: "#/components/schemas/Link"
+ $ref: "#/components/schemas/LinkGETFieldOperations"
total:
description: "Number of results in the list"
type: "integer"
format: "int64"
example: 70
values:
- $ref: "#/components/schemas/FieldOperationLayers"
+ type: "array"
+ items:
+ $ref: "#/components/schemas/FieldOperation"
examples:
- HarvestOperation:
- summary: "Harvest OperationLayers"
+ No Header:
+ description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 520122365ebb4870a344784570d202c7"
value:
links:
- rel: "self"
- uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5"
+ uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations"
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"
+ - "@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:
- - 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"
- 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
- 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"
+ - "@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:
+ 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"
+ Client:
type: "object"
- description: "Operators that performed work using this machine"
+ description: "The client associated with this FieldOperation. Populated only when the associated embed is requested."
properties:
- operatorId:
+ id:
type: "string"
- 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"
+ 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:
+ description: "The name of the client."
+ example: "My Custom Client Name"
+ archived:
+ type: "boolean"
+ example: false
+ Component:
type: "object"
- description: "Machines utilized during this operation"
+ description: "An individual product combined with others in a tank mix."
properties:
- erid:
+ "@type":
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:
+ example: "Component"
+ guid:
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:
+ 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."
- Link:
+ 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 - 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:
+ - $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: null
- FieldLink:
+ fromGuid:
+ $ref: "#/components/schemas/ProductErid"
+ toGuid:
+ $ref: "#/components/schemas/ProductErid"
+ Error:
type: "object"
- description: "A link provides a URI to access resources that are related to the response."
properties:
- rel:
+ guid:
type: "string"
- description: "The relation of the object to the linked resource."
- example: "field"
- uri:
+ format: "guid"
+ example: "11111111-2222-3333-4444-555555555555"
+ message:
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:
+ 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: "The client associated with this FieldOperation. Populated only when the associated embed is requested."
+ description: "A general representation of quantity and unit."
+ example:
+ "@type": "EventMeasurement"
+ value: 17.13
+ unitId: "gal1ac-1"
properties:
- id:
+ "@type":
type: "string"
- description: "Globally unique identifier for this client."
- example: "66dd9c64-71d7-4904-86f8-e04d40ccf59d"
- links:
- type: "array"
- items:
- $ref: "#/components/schemas/Link"
- name:
+ example: "EventMeasurement"
+ value:
+ type: "number"
+ format: "double"
+ description: "The quantity represented by this measurement."
+ unitId:
type: "string"
- description: "The name of the client."
- example: "My Custom Client Name"
- archived:
+ 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."
@@ -1252,288 +1309,27 @@ components:
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:
+ FieldLink:
type: "object"
+ description: "A link provides a URI to access resources that are related to the response."
properties:
- "@type":
- type: "string"
- example: "Product"
- guid:
- $ref: "#/components/schemas/ProductErid"
- productType:
- $ref: "#/components/schemas/FieldOperationProductTypesEnum"
- name:
+ rel:
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:
+ description: "The relation of the object to the linked resource."
+ example: "field"
+ uri:
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:
+ 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"
- description: "An individual product combined with others in a tank mix."
properties:
- "@type":
+ id:
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"
- 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"
- FieldOperation:
- type: "object"
- properties:
- id:
- type: "string"
- description: "Field Operation ID"
- example: "MjkyMDdfNT"
- x-deere-signature:
+ 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."
@@ -1610,32 +1406,69 @@ components:
items:
$ref: "#/components/schemas/FieldOperationMeasurement"
x-embed-contract-applied: true
- FieldOperationId:
+ FieldOperationCompareStatisticsRequest:
type: "object"
+ required:
+ - "compareOperationIds"
+ - "baseLayer"
+ - "compareLayer"
properties:
- orgId:
- type: "string"
- description: "The organization ID."
- example: 1234
- cropSeason:
- 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."
- fieldOperationType:
- 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"
- modifiedTime:
- type: "string"
- format: "date-time"
- description: "Last time that anything was modified on this field operation."
- example: "2018-11-17T11:53:00.000Z"
- varieties:
+ 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
+ cropSeason:
+ 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."
+ fieldOperationType:
+ 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"
+ modifiedTime:
+ type: "string"
+ 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"
@@ -1652,24 +1485,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,250 +1632,100 @@ 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:
+ 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"
- 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:
+ 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"
- 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: "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"
- 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:
- 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"
- 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"
- 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
- FieldOperationPNGImage:
- type: "object"
- properties:
- image:
- description: "Base64 encoded PNG image"
- type: "string"
- example: "data:image/png;base64,{base64EncodedContent}"
- mapLegend:
- $ref: "#/components/schemas/MapLegend"
- extent:
- $ref: "#/components/schemas/MapExtent"
- 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"
- 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"
- LayerStatistics:
- description: "The statistics for a given layer context."
- type: "object"
- properties:
- "@type":
- type: "string"
- example: "LayerStatistics"
- oneOf:
- - $ref: "#/components/schemas/EventMeasurementStats"
- - $ref: "#/components/schemas/EventObservationStats"
- FieldOperationLayerImageRequest:
- type: "object"
- properties:
- 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)"
- 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:
- type: "object"
- description: "The fully released portion of the FieldOperationMeasurement."
- properties:
- links:
- type: "array"
- items:
- $ref: "#/components/schemas/Link"
+ links:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/Link"
"@type":
type: "string"
example: "FieldOperationMeasurement"
@@ -2067,130 +1793,453 @@ components:
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."
- 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"
- properties:
- "@type":
- type: "string"
- example: "EventMeasurement"
- value:
- type: "number"
- format: "double"
- description: "The quantity represented by this measurement."
+ 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"
+ 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"
+ FieldOperationPNGImage:
+ type: "object"
+ properties:
+ image:
+ description: "Base64 encoded PNG image"
+ type: "string"
+ example: "data:image/png;base64,{base64EncodedContent}"
+ mapLegend:
+ $ref: "#/components/schemas/MapLegend"
+ extent:
+ $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:
+ 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"
+ properties:
+ "@type":
+ type: "string"
+ example: "LayerStatistics"
+ oneOf:
+ - $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."
+ 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"
- description: "The unit associated to the quantity measured"
- example: "gal1ac-1."
- variableRepresentation:
+ example: "lb1ac-1"
+ ranges:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/MapRange"
+ MapRange:
+ allOf:
+ - $ref: "#/components/schemas/MapRangeForGeoTiff"
+ - $ref: "#/components/schemas/MapRangeForIndex"
+ - $ref: "#/components/schemas/MapRangeForMeasurement"
+ MapRangeForGeoTiff:
+ type: "object"
+ properties:
+ "@type":
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: "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: "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"
+ 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"
- description: "A general representation of an observed value."
properties:
"@type":
type: "string"
- example: "EventObservation"
- value:
+ 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"
- description: "The observed value, e.g. NW wind direction."
- example: "NW"
- EventObservationStats:
+ 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:
+ fromName:
+ type: "string"
+ 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 +2256,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 +2329,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 +2393,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 +2506,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 +2532,10 @@ components:
items:
$ref: "#/components/schemas/ProductTotal"
x-embed-contract-applied: true
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag2: "ag2"
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..34bb2ca 100644
--- a/specs/fixed/files.yaml
+++ b/specs/fixed/files.yaml
@@ -192,61 +192,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 +243,41 @@ 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"
+ 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: "boolean"
- default: "N/A"
- example: "true"
+ 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 +287,32 @@ components:
type: "integer"
default: "N/A"
example: -1
+ 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 +322,6 @@ components:
type: "integer"
default: "N/A"
example: -1
- FileId:
- name: "fileId"
- in: "path"
- description: "File Id."
- x-required-boolean: true
- schema:
- type: "string"
- default: "N/A"
- example: 577499742
StartDate:
name: "startDate"
in: "query"
@@ -326,14 +331,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 +339,83 @@ 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
+ 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:
- 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."
- 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"
+ 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"
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 +469,21 @@ 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:
- 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"
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
FileType:
type: "string"
enum:
@@ -496,62 +502,6 @@ 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"
- 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
- 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."
FilesGet:
type: "object"
properties:
@@ -624,6 +574,64 @@ 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."
+ 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 +692,11 @@ 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"
diff --git a/specs/fixed/flags.yaml b/specs/fixed/flags.yaml
index ede6be2..83bbc0e 100644
--- a/specs/fixed/flags.yaml
+++ b/specs/fixed/flags.yaml
@@ -19,6 +19,110 @@ servers:
- "partnerapiqa"
- "sandboxapiqa"
paths:
+ /organizations/{orgId}/fields/{fieldId}/flags:
+ 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."
+ security:
+ - OAuth2:
+ - "ag1"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ - $ref: "#/components/parameters/FieldId"
+ - $ref: "#/components/parameters/Accept-Language"
+ - $ref: "#/components/parameters/Embed"
+ - $ref: "#/components/parameters/StartTime"
+ - $ref: "#/components/parameters/EndTime"
+ - $ref: "#/components/parameters/CategoryIds"
+ - $ref: "#/components/parameters/CategoryNames"
+ - $ref: "#/components/parameters/RecordFilter"
+ - $ref: "#/components/parameters/ShapeTypes"
+ - $ref: "#/components/parameters/Simple"
+ - $ref: "#/components/parameters/MetadataOnly"
+ 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}/flags:
+ post:
+ operationId: "createFlag"
+ tags:
+ - "Flags APIs"
+ description: "This resource will create a flag in the given organization."
+ summary: "Create a flag"
+ security:
+ - OAuth2:
+ - "ag3"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ requestBody:
+ description: "The flag data to add. The new uuid will be assigned as ID of the newly created flag."
+ x-required-boolean: 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"
+ 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. - No contributon definition ID is found - Field link cannot be resolved (field not found)"
+ get:
+ summary: "View flags list"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ - $ref: "#/components/parameters/Accept-Language"
+ - $ref: "#/components/parameters/Embed"
+ - $ref: "#/components/parameters/StartTime"
+ - $ref: "#/components/parameters/EndTime"
+ - $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: "getFlagsForOrganization"
+ security:
+ - OAuth2:
+ - "ag1"
+ tags:
+ - "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}/flags/{flagId}:
get:
summary: "List a flag by org id and Flag id"
@@ -134,120 +238,48 @@ paths:
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."
- /organizations/{orgId}/flags:
- post:
- operationId: "createFlag"
- tags:
- - "Flags APIs"
- description: "This resource will create a flag in the given organization."
- summary: "Create a flag"
- security:
- - OAuth2:
- - "ag3"
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- requestBody:
- description: "The flag data to add. The new uuid will be assigned as ID of the newly created flag."
- x-required-boolean: 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"
- 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. - No contributon definition ID is found - Field link cannot be resolved (field not found)"
- get:
- summary: "View flags list"
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- - $ref: "#/components/parameters/Accept-Language"
- - $ref: "#/components/parameters/Embed"
- - $ref: "#/components/parameters/StartTime"
- - $ref: "#/components/parameters/EndTime"
- - $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: "getFlagsForOrganization"
- security:
- - OAuth2:
- - "ag1"
- tags:
- - "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:
- 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."
- security:
- - OAuth2:
- - "ag1"
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- - $ref: "#/components/parameters/FieldId"
- - $ref: "#/components/parameters/Accept-Language"
- - $ref: "#/components/parameters/Embed"
- - $ref: "#/components/parameters/StartTime"
- - $ref: "#/components/parameters/EndTime"
- - $ref: "#/components/parameters/CategoryIds"
- - $ref: "#/components/parameters/CategoryNames"
- - $ref: "#/components/parameters/RecordFilter"
- - $ref: "#/components/parameters/ShapeTypes"
- - $ref: "#/components/parameters/Simple"
- - $ref: "#/components/parameters/MetadataOnly"
- 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."
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"
+ 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"
+ 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 +290,31 @@ components:
format: "uuid"
default: "N/A"
example: "c634597d-3d1a-4975-93e9-acc6696658d2"
+ 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"
@@ -285,63 +342,6 @@ components:
type: "string"
default: "N/A"
example: 123456
- 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"
- 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"
- 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"
- StartTime:
- name: "startTime"
- in: "query"
- description: "Flags created after start time (in UTC) will be returned"
- 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"
- 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"
- 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"
RecordFilter:
name: "recordFilter"
in: "query"
@@ -350,14 +350,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 +366,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 +503,8 @@ components:
Headers:
description: "201 Created Location: https://sandboxapi.deere.com/platform/flags/3e4f37a4-5667-49ae-9f6b-5a13e446dee6"
schemas:
+ ContentType:
+ properties: {}
LinkFlagId:
properties:
flagCategoryWithPrefrences:
@@ -546,8 +540,6 @@ components:
field:
example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID"
description: "Field Link."
- ContentType:
- properties: {}
ValuesFlagId:
properties:
geometry:
@@ -601,3 +593,11 @@ components:
links:
items:
$ref: "#/components/schemas/LinkFlagIdPut"
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag1: "ag1"
+ ag3: "ag3"
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..c0dfc0b 100644
--- a/specs/fixed/machine-locations.yaml
+++ b/specs/fixed/machine-locations.yaml
@@ -125,13 +125,6 @@ paths:
description: "Machine not found"
content: {}
components:
- securitySchemes:
- OAuth2:
- type: "oauth2"
- flows:
- clientCredentials:
- scopes:
- eq1: "eq1"
schemas:
MyJD_links:
properties:
@@ -169,3 +162,10 @@ 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"
diff --git a/specs/fixed/map-layers.yaml b/specs/fixed/map-layers.yaml
index 67ba747..feb9441 100644
--- a/specs/fixed/map-layers.yaml
+++ b/specs/fixed/map-layers.yaml
@@ -15,71 +15,6 @@ servers:
- "sandboxapi"
- "partnerapi"
paths:
- /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"
/mapLayerSummaries/{id}:
get:
description: "Returns a specific Map Layer Summary resource."
@@ -168,7 +103,81 @@ paths:
$ref: "#/components/responses/406"
"429":
$ref: "#/components/responses/429"
+ /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:
+ 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"
@@ -180,26 +189,6 @@ components:
example: 1234
format: "uuid"
default: "N/A"
- fileId:
- in: "path"
- name: "fileId"
- description: "Field ID"
- x-required-boolean: true
- schema:
- type: "string"
- 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
- schema:
- type: "boolean"
- example: "true"
- format: "uuid"
- default: "false"
embed:
name: "embed"
in: "query"
@@ -220,6 +209,16 @@ components:
format: "uuid"
example: "d01111d6-1fa4-4659-943a-3df4a6b7933c"
default: "N/A"
+ fileId:
+ in: "path"
+ name: "fileId"
+ description: "Field ID"
+ x-required-boolean: true
+ schema:
+ type: "string"
+ format: "int64"
+ example: "d01111d6-1fa4-4659-943a-3df4a6b7933c"
+ default: "N/A"
id:
name: "id"
in: "path"
@@ -230,141 +229,73 @@ components:
example: "y02111d6-1fa4-4659-943a-3df4a6b7933c"
format: "uuid"
default: "N/A"
- securitySchemes:
- OAuth2:
- type: "oauth2"
- flows:
- clientCredentials:
- scopes:
- ag2: "ag2"
- ag3: "ag3"
+ 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."
- CollectionBase:
- type: "object"
- properties:
- links:
+ example: "Errors"
+ errors:
type: "array"
items:
properties:
- rel:
+ "@type":
type: "string"
- description: "Links relavent to exploring the collection."
- example: "self"
- uri:
+ example: "Error"
+ guid:
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
- 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: "array"
- description: "The primary resource listing."
- 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:
- type: "array"
- 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"
+ 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):
@@ -385,111 +316,25 @@ components:
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"
- 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"
- 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:
+ CollectionBase:
+ type: "object"
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: "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"
- 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."
- Metadata:
- required:
- - "name"
- - "value"
- type: "object"
- properties:
- "@type":
- 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"
+ 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:
@@ -537,78 +382,23 @@ components:
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."
+ 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."
+ FileResource:
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
- 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
- FileResource:
- required:
- - "links"
- - "metadata"
+ - "links"
+ - "metadata"
type: "object"
properties:
"@type":
@@ -643,7 +433,7 @@ components:
type: "array"
items:
$ref: "#/components/schemas/Link"
- 400Errors:
+ GenericErrors:
properties:
"@type":
type: "string"
@@ -661,71 +451,281 @@ components:
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"
+ example: "The requested resource was not found"
otherAttributes:
type: "object"
- GenericErrors:
+ 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."
+ Link:
+ type: "object"
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: "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."
+ 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"
+ MapLayerSummaryCollection:
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:
+ 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."
+ 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:
+ type: "array"
+ 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"
+ 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"
+ 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:
+ 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: "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"
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag2: "ag2"
+ ag3: "ag3"
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..48daee0 100644
--- a/specs/fixed/products.yaml
+++ b/specs/fixed/products.yaml
@@ -302,67 +302,6 @@ paths:
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:
- 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:
get:
tags:
@@ -498,6 +437,67 @@ paths:
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:
@@ -598,17 +598,6 @@ paths:
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"
@@ -621,15 +610,29 @@ components:
- "ARCHIVED"
- "ALL"
example: "AVAILABLE"
- OrganizationID:
+ ERID:
in: "path"
- name: "organizationId"
- description: "The identifier of the Organization."
+ 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: "integer"
- example: 6781
- format: "int64"
+ 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"
OrgId:
name: "orgId"
in: "path"
@@ -638,6 +641,15 @@ components:
schema:
type: "number"
example: 654321
+ 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"
@@ -645,27 +657,17 @@ components:
schema:
type: "string"
example: "active, archived, all"
- Embed:
- name: "embed"
+ VarietyEmbed:
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."
+ description: "An embeddable list of properties which are optional by default."
schema:
- type: "string"
- example: "9r8392615e4b4e1c92018026f47109bb"
+ type: "array"
+ items:
+ type: "string"
+ enum:
+ - "documents"
+ - "showMergedProducts"
VarietyId:
name: "varietyId"
in: "path"
@@ -682,24 +684,33 @@ components:
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"
+ 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"
- format: "uuid"
- securitySchemes:
- OAuth2:
- type: "oauth2"
- flows:
- clientCredentials:
- scopes:
- ag2: "ag2"
- ag3: "ag3"
+ example: "9r8392615e4b4e1c92018026f47109bb"
+ responses:
+ Created:
+ description: "Created"
schemas:
+ 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:
@@ -711,26 +722,116 @@ components:
type: "string"
format: "uuid"
example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
- Document:
+ ChildVariety:
type: "object"
allOf:
+ - $ref: "#/components/schemas/BaseResource"
- properties:
"@type":
- example: "Document"
- x-required-boolean: true
- erid:
- type: "string"
- description: "Unique id of the document"
- example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4"
- docType:
+ example: "Variety"
+ id:
type: "string"
- example: "24(c) Registration"
- description: "Type of document for this product."
- x-required-boolean: true
- productErid:
+ 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: "388ab719-277d-4032-a2c3-40a297d8f482"
- description: "The Unique id of the product."
+ 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
+ CommonProductPointerRequest:
+ type: "object"
+ properties:
+ overrides:
+ nullable: true
+ type: "array"
+ items:
+ $ref: "#/components/schemas/OverrideKeyValuePair"
+ 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"
@@ -763,90 +864,45 @@ components:
type: "array"
items:
$ref: "#/components/schemas/Document"
- BaseResource:
+ Errors:
type: "object"
+ format: "Errors/DataValidationException"
properties:
"@type":
type: "string"
- example: "BaseResource"
- id:
- description: "Primary identifier for resource."
- type: "string"
- format: "uuid"
- example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
- links:
+ example: "Errors"
+ errors:
type: "array"
- description: "Provides a reference to an associated object or list."
items:
- $ref: "#/components/schemas/Link"
- ReferenceVariety:
- type: "object"
- allOf:
- - $ref: "#/components/schemas/BaseResource"
- - properties:
- "@type":
- example: "ReferenceVariety"
- id:
- description: "Primary identifier for reference variety."
- type: "string"
- format: "uuid"
- example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
- nullable: false
- referenceId:
- 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."
- 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"
- 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)."
- 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
- 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"
+ 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"
Link:
type: "object"
properties:
@@ -863,27 +919,6 @@ components:
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:
- - $ref: "#/components/schemas/CollectionBase"
- - properties:
- values:
- type: "array"
- items:
- $ref: "#/components/schemas/ReferenceVariety"
OverrideKeyValuePair:
type: "object"
properties:
@@ -902,49 +937,50 @@ components:
required:
- "key"
- "value"
- CommonProductPointerRequest:
+ PostVariety:
type: "object"
- properties:
- overrides:
- nullable: true
- type: "array"
- items:
- $ref: "#/components/schemas/OverrideKeyValuePair"
- ReferenceProductPointerRequest:
allOf:
- properties:
- countryCode:
+ "@type":
+ example: "Variety"
+ name:
type: "string"
- example: "USA"
- description: "Country of the product to which it belongs."
+ example: "S73-Z5 - 50lb bag"
+ description: "The common name of the variety."
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"
+ 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"
PutVariety:
type: "object"
allOf:
@@ -989,94 +1025,109 @@ components:
- "name"
- "cropName"
- "companyName"
- VarietyIdUpdate:
+ ReferenceProductOverrideStatus:
+ type: "object"
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:
+ key:
+ nullable: false
type: "string"
- example: "CORN_WET"
- description: "The identifier of the crop type that this variety is associated with."
- archived:
+ description: "Key for override parameter when setting overrides for a reference product"
+ example: "archived"
+ enum:
+ - "archived"
+ success:
+ nullable: false
type: "boolean"
- example: false
- description: "Whether or not this product is actively used. Defaults to false."
- ChildVariety:
+ 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:
- $ref: "#/components/schemas/BaseResource"
- properties:
"@type":
- example: "Variety"
+ example: "ReferenceVariety"
id:
+ description: "Primary identifier for reference variety."
type: "string"
- example: "87b4a1e7-210b-482c-8a7a-19e9f644e914"
format: "uuid"
+ example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
nullable: false
- description: "The primary identifier for the variety that is unique to your organization."
- name:
+ referenceId:
type: "string"
- example: "S73-Z5 - 50lb bag"
- description: "The common name of the variety."
- nullable: false
+ example: "87b4a1e7-210b-482c-8a7a-19e9f644e914"
+ format: "uuid"
+ description: "product id of the reference variety"
category:
type: "string"
enum:
- "VARIETY"
example: "VARIETY"
- cropName:
+ name:
type: "string"
- example: "SOYBEANS"
- description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)."
+ 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."
+ 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
createdTime:
type: "string"
format: "date-time"
- example: "2017-03-21T21:12:53.865Z"
+ example: "2019-03-27T14:59:57.000Z"
description: "product created time"
modifiedTime:
type: "string"
format: "date-time"
- example: "2018-04-06T15:12:52.910Z"
+ example: "2019-03-27T14:59:57.000Z"
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:
+ ReferenceVarietyCollection:
+ type: "object"
+ allOf:
+ - $ref: "#/components/schemas/CollectionBase"
+ - properties:
+ values:
type: "array"
items:
- $ref: "#/components/schemas/Document"
- description: "List of documents for the variety. For example, Tech Sheet, SDS Label."
+ $ref: "#/components/schemas/ReferenceVariety"
Variety:
type: "object"
allOf:
@@ -1162,89 +1213,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 +1244,29 @@ 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."
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag2: "ag2"
+ ag3: "ag3"
diff --git a/specs/fixed/webhook.yaml b/specs/fixed/webhook.yaml
index 4f0d55b..95ada41 100644
--- a/specs/fixed/webhook.yaml
+++ b/specs/fixed/webhook.yaml
@@ -131,15 +131,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 +158,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 +183,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 +201,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 +214,30 @@ 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"
+ 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 +255,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 +270,18 @@ 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"
+ DoesNotHaveAccessResponse:
+ description: "Does not have access"
+ InputValueIsInvalidResponse:
+ description: "Not found"
SubscriptionCollectionResponse:
description: "Subscriptions"
content:
@@ -304,15 +327,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 +351,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 +359,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 +377,13 @@ components:
examples:
Headers:
description: "204 No Content"
- InputValueIsInvalidResponse:
- description: "Not found"
- DoesNotHaveAccessResponse:
- description: "Does not have access"
- BadRequestResponse:
- description: "Bad Request"
- content:
- application/vnd.deere.axiom.v3+json:
- schema:
- $ref: "#/components/schemas/Errors"
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,6 +432,37 @@ components:
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"
properties:
@@ -518,80 +486,142 @@ components:
type: "string"
description: "The value that was supplied for this field in the request"
example: "Bad value"
- SubscriptionRequestContent:
- description: "A subscription request"
+ Errors:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/Error"
+ 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."
properties:
- eventTypeId:
- $ref: "#/components/schemas/EventTypeId"
- filters:
+ key:
+ type: "string"
+ example: "orgId"
+ values:
type: "array"
items:
- $ref: "#/components/schemas/Filter"
- targetEndpoint:
- $ref: "#/components/schemas/HttpsSubscription"
- status:
+ type: "string"
+ example: "1234"
+ required:
+ - "key"
+ - "values"
+ HTTPTargetEndpointEventContent:
+ description: "An event"
+ type: "object"
+ properties:
+ clientKey:
type: "string"
- enum:
- - "Active"
- default: "Active"
- displayName:
+ description: "The client key that made the subscription"
+ example: "johndeere-abcdef"
+ eventTypeId:
type: "string"
- example: "mySubscribedEndPoint"
+ 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 well be sent with each delivery to validate the sender. Accepts the base 64 character set."
+ 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"
- - "targetEndpoint"
- Filter:
+ - "targetResource"
+ - "metadata"
+ - "links"
+ HTTPTargetEndpointEventMetadata:
type: "object"
- description: "Consists of a key and list of values used to filter events based on metadata."
+ description: "Generic key value pair"
properties:
key:
type: "string"
example: "orgId"
- values:
- type: "array"
- items:
- type: "string"
- example: "1234"
+ 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:
- - "key"
- - "values"
+ - "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"
+ 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 +642,28 @@ 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"
- properties:
+ example: "My Data Subscription"
+ description: "Human-readable name to easily identify the event subscription."
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"
- 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."
+ 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}$'"
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+jsonx-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+jsonx-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.
-
- - Determine the Equipment’s make, type, and model IDs
- - Create the Equipment. Please see the Equipment API for more information on creating equipment.
- - Contribute Measurements
-
+ 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. - Determine the Equipment’s make, type, and model IDs
- Create the Equipment. Please see the Equipment API for more information on creating equipment.
- Contribute Measurements
- Determining the Equipment’s make, type, and 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}/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.
- - Call the GET /equipmentMakes/{id}/equipmentTypes/{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,type which will include all models with search string results and include make and type 'id' as well as model 'id'.
-
+ Determining the Equipment’s make, type, and 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}/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.
- Call the GET /equipmentMakes/{id}/equipmentTypes/{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,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 a2e3e1b..0a8aaf0 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.
-
- - Determine the Equipment’s model IDs
- - Create the Equipment
- - Contribute Measurements. Please see the
- Equipment Measurements (POST) API 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.
+
+ - 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,2521 +374,2690 @@ 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. - Determine the Equipment’s model IDs
- Create the Equipment
- Contribute Measurements. Please see the Equipment Measurements (POST) API 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"
+ 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:
items:
- $ref: '#/components/schemas/equipmentForList'
+ $ref: "#/components/schemas/equipmentForList"
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:
items:
- $ref: '#/components/schemas/equipment'
+ $ref: "#/components/schemas/equipment"
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+jsonx-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+jsonx-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..00eafcc 100644
--- a/specs/raw/field-operations-api.yaml
+++ b/specs/raw/field-operations-api.yaml
@@ -1,428 +1,357 @@
-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"
+ /fieldOps/{operationId}:
get:
- summary: View a Field Operation
- description: 'View a single field operation.
- The response will include links to:
-
-
"
- 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}/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.\"
-
- "
-
+ 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'
+ - $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 ]
+ - 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.
-
+ "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"
+ 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: boolean
- default: 'N/A'
- example: 'true'
+ 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
- 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.
+ OrganizationID:
+ in: "path"
+ name: "orgId"
+ description: "Organization"
required: true
schema:
- type: integer
- default: 'N/A'
- example: -1
- FileId:
- name: fileId
- in: path
- description: File Id.
+ type: "string"
+ default: "N/A"
+ example: 73
+ OrganizationID2:
+ in: "path"
+ name: "orgId"
+ description: "Organization"
required: true
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"
+ example: 73
+ OrganizationID3:
+ in: "path"
+ name: "orgId"
+ description: "Organization"
+ required: true
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"
+ 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."
+ required: true
schema:
- type: dateTime
- default: 'N/A'
- example: 2015-02-03T10:42:24.282Z
- Status:
- name: status
- in: query
- description: Allows client to filter files according to whether they are transferable to machines. Takes TRANSFERABLE and NON_TRANSFERABLE.
+ type: "integer"
+ default: "N/A"
+ example: -1
+ 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: 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: "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."
schema:
- type: boolean
- default: 'false'
- example: 'true'
- Name:
- name: name
- in: body
- description: File name.
- required: true
+ type: "string"
+ default: "N/A"
+ example: "TRANSFERABLE"
+ Transferable:
+ in: "query"
+ name: "transferable"
+ description: "Filters by whether a file is transferable"
+ required: "Optional"
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: "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:
- 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"
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:
- 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.
+ FileType:
+ type: "string"
+ enum:
+ - "SETUP"
+ - "PRESCRIPTION"
+ - "INVALID"
+ - "UNKNOWN"
+ - "DOC"
+ - "JDBACKUP"
+ - "HIC"
+ - "TIMBERLINK"
+ - "EXPORT"
+ - "TIMBERMATIC"
+ - "PDF"
+ - "ISO_SETUP"
+ - "BOUNDARY"
+ - "EXCEL"
+ example: "SETUP"
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."
+ 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"
diff --git a/specs/raw/flags.yaml b/specs/raw/flags.yaml
index 8995239..8a76684 100644
--- a/specs/raw/flags.yaml
+++ b/specs/raw/flags.yaml
@@ -1,48 +1,183 @@
-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}/fields/{fieldId}/flags:
+ 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."
+ security:
+ - OAuth2:
+ - "ag1"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ - $ref: "#/components/parameters/FieldId"
+ - $ref: "#/components/parameters/Accept-Language"
+ - $ref: "#/components/parameters/Embed"
+ - $ref: "#/components/parameters/StartTime"
+ - $ref: "#/components/parameters/EndTime"
+ - $ref: "#/components/parameters/CategoryIds"
+ - $ref: "#/components/parameters/CategoryNames"
+ - $ref: "#/components/parameters/RecordFilter"
+ - $ref: "#/components/parameters/ShapeTypes"
+ - $ref: "#/components/parameters/Simple"
+ - $ref: "#/components/parameters/MetadataOnly"
+ 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}/flags:
+ post:
+ operationId: "createFlag"
+ tags:
+ - "Flags APIs"
+ description: "This resource will create a flag in the given organization."
+ summary: "Create a flag"
+ security:
+ - OAuth2:
+ - "ag3"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ 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:
+ 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"
+ responses:
+ "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)\n"
+ get:
+ summary: "View flags list"
+ parameters:
+ - $ref: "#/components/parameters/OrgId3"
+ - $ref: "#/components/parameters/Accept-Language"
+ - $ref: "#/components/parameters/Embed"
+ - $ref: "#/components/parameters/StartTime"
+ - $ref: "#/components/parameters/EndTime"
+ - $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: "getFlagsForOrganization"
+ security:
+ - OAuth2:
+ - "ag1"
+ tags:
+ - "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}/flags/{flagId}:
get:
- summary: List a flag by org id and Flag id
+ summary: "List a flag by org id and Flag id"
security:
- - OAuth2: [ ag1 ]
+ - OAuth2:
+ - "ag1"
parameters:
- $ref: "#/components/parameters/OrgId"
- $ref: "#/components/parameters/FlagId"
@@ -57,605 +192,475 @@ paths:
- $ref: "#/components/parameters/ShapeTypes"
- $ref: "#/components/parameters/Simple"
- $ref: "#/components/parameters/MetadataOnly"
-
- operationId: getFlagForOrganizationByFlagId
+ operationId: "getFlagForOrganizationByFlagId"
tags:
- - Flags APIs
- description: This endpoint will return a flag for a given org and Flag id.
+ - "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
-
+ "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
+ operationId: "updateFlagByIdOrgId"
+ summary: "Update flag by id"
tags:
- - Flags APIs
- description: This resource will update flag by Organization and Flag Id.
+ - "Flags APIs"
+ description: "This resource will update flag by Organization and Flag Id."
security:
- - OAuth2: [ ag3 ]
+ - OAuth2:
+ - "ag3"
parameters:
- - $ref: '#/components/parameters/OrgId2'
- - $ref: '#/components/parameters/FlagId'
+ - $ref: "#/components/parameters/OrgId2"
+ - $ref: "#/components/parameters/FlagId"
requestBody:
content:
- 'application/vnd.deere.axiom.v3+json':
+ application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/ValuesFlagIdPut'
+ $ref: "#/components/schemas/ValuesFlagIdPut"
examples:
No Header:
value:
- '@type': Flag
- id: FlagId
- notes: SomeRandomString
+ "@type": "Flag"
+ id: "FlagId"
+ notes: "SomeRandomString"
geometry:
- type: Point
+ 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
+ - "@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
+ 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: Update response by Flag Id
+ "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
+ 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
+ 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
+ - "Flags APIs"
+ description: "This resource will delete a single flag based on its Id and org id"
security:
- - OAuth2: [ ag3 ]
+ - OAuth2:
+ - "ag3"
parameters:
- - $ref: '#/components/parameters/FlagId'
- - $ref: '#/components/parameters/OrgId'
+ - $ref: "#/components/parameters/FlagId"
+ - $ref: "#/components/parameters/OrgId"
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 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.
-
- /organizations/{orgId}/flags:
- post:
- operationId: createFlag
- tags:
- - Flags APIs
- description: This resource will create a flag in the given organization.
- summary: Create a flag
- security:
- - OAuth2: [ ag3 ]
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- 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:
- description: |
- The flag data to add. The new uuid will be assigned as ID of the newly created flag.
- 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
- 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.
- - No contributon definition ID is found
- - Field link cannot be resolved (field not found)
-
- get:
- summary: View flags list
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- - $ref: "#/components/parameters/Accept-Language"
- - $ref: "#/components/parameters/Embed"
- - $ref: "#/components/parameters/StartTime"
- - $ref: "#/components/parameters/EndTime"
- - $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: getFlagsForOrganization
- security:
- - OAuth2: [ ag1 ]
- tags:
- - 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:
- 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.
- security:
- - OAuth2: [ ag1 ]
- parameters:
- - $ref: "#/components/parameters/OrgId3"
- - $ref: "#/components/parameters/FieldId"
- - $ref: "#/components/parameters/Accept-Language"
- - $ref: "#/components/parameters/Embed"
- - $ref: "#/components/parameters/StartTime"
- - $ref: "#/components/parameters/EndTime"
- - $ref: "#/components/parameters/CategoryIds"
- - $ref: "#/components/parameters/CategoryNames"
- - $ref: "#/components/parameters/RecordFilter"
- - $ref: "#/components/parameters/ShapeTypes"
- - $ref: '#/components/parameters/Simple'
- - $ref: '#/components/parameters/MetadataOnly'
-
- 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.
+ 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"
+ 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"
+ 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
+ type: "GUID"
+ default: "N/A"
+ example: "c634597d-3d1a-4975-93e9-acc6696658d2"
+ 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
+ name: "orgId"
+ in: "path"
+ description: "Organization Id where the Flag belongs to"
required: true
schema:
- type: string
- default: N/A
+ type: "string"
+ default: "N/A"
example: 123456
- 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
- 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
- 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
- StartTime:
- name: startTime
- in: query
- description: Flags created after start time (in UTC) will be returned
- 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
- 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
- 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
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"
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:
- properties:
- Content-Type: application/vnd.deere.axiom.v3+json
+ example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID"
+ description: "Field Link."
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"
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..4f40847 100644
--- a/specs/raw/machine-locations.yaml
+++ b/specs/raw/machine-locations.yaml
@@ -1,161 +1,159 @@
-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}/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:
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."
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"
diff --git a/specs/raw/map-layers.yaml b/specs/raw/map-layers.yaml
index 2a36821..58e6225 100644
--- a/specs/raw/map-layers.yaml
+++ b/specs/raw/map-layers.yaml
@@ -1,943 +1,1046 @@
-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:
- 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'
/mapLayerSummaries/{id}:
get:
- description: Returns a specific Map Layer Summary resource.
- summary: View a Map Layer Summary
+ description: "Returns a specific Map Layer Summary resource."
+ summary: "View a Map Layer Summary"
parameters:
- - $ref: '#/components/parameters/id'
+ - $ref: "#/components/parameters/id"
security:
- - OAuth2: [ ag2 ]
+ - OAuth2:
+ - "ag2"
responses:
- 200:
- description: View a specific Map Layer Summary
+ "200":
+ description: "View a specific Map Layer Summary"
content:
application/vnd.deere.axiom.v3+json:
schema:
properties:
values:
items:
- $ref: '#/components/schemas/PostContributedMapLayerSummary'
+ $ref: "#/components/schemas/PostContributedMapLayerSummary"
links:
items:
- $ref: '#/components/schemas/GetMapLayerSummaryAvailableLinks'
+ $ref: "#/components/schemas/GetMapLayerSummaryAvailableLinks"
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/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
+ - 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'
+ - 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
+ 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'
+ - $ref: "#/components/parameters/id"
security:
- - OAuth2: [ ag3 ]
+ - OAuth2:
+ - "ag3"
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"
+ "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"
+ /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:
+ 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\": {}
+
+ }\n"
+ 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\"
+
+ \ }
+
+ \ ]
+
+ }\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
+ in: "path"
+ name: "orgId"
+ description: "Organization ID"
required: true
schema:
- type: string
+ 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'
+ format: "uuid"
+ default: "N/A"
embed:
- name: embed
- in: query
- description: Takes these values mapLayers.
+ name: "embed"
+ in: "query"
+ description: "Takes these values mapLayers."
required: false
schema:
- type: string
- example: mapLayers
- format: uuid
- default: 'N/A'
+ type: "string"
+ example: "mapLayers"
+ format: "uuid"
+ default: "N/A"
fieldId:
- name: fieldId
- in: path
- description: Field ID
+ name: "fieldId"
+ in: "path"
+ description: "Field ID"
required: true
schema:
- type: GUID
- example: d01111d6-1fa4-4659-943a-3df4a6b7933c
- format: uuid
- default: 'N/A'
+ 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"
id:
- name: id
- in: path
- description: Map Layer Summary 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'
+ type: "string"
+ example: "y02111d6-1fa4-4659-943a-3df4a6b7933c"
+ format: "uuid"
+ 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"
+ 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.
+ "@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."
CollectionBase:
- type: object
+ type: "object"
properties:
links:
- type: array
+ type: "array"
items:
properties:
rel:
- type: string
- description: Links relavent to exploring the collection.
- example: self
+ 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'
+ 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
+ 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'
+ ContributedMapLayer:
+ type: "object"
+ required:
+ - "title"
+ - "legends"
+ properties:
+ "@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
+ 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.
+ type: "number"
+ description: "Count of Map Layer Summaries in response."
example: 3
values:
- type: Map Layer Summary array
- description: The primary resource listing.
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
-
- 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:
+ type: "datetime"
+ description: "ISO 8601 Date and time in UTC this resource was last modified."
+ example: "2016-01-02T16:14:23.421Z"
+ FileResource:
+ required:
+ - "links"
+ - "metadata"
+ type: "object"
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
+ "@type":
+ type: "string"
+ example: "FileResource"
+ mimeType:
+ type: "string"
+ description: "The mimeType of the FileResource."
+ enum:
+ - "image/png"
+ - "image/tif"
+ - "image/tiff"
+ - "application/zip"
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:
+ 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:
- 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
-
- PostAvailableLinks:
+ description: "Links for self, targetResource, and owningOrganization"
+ type: "array"
+ items:
+ $ref: "#/components/schemas/Link"
+ GenericErrors:
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.
-
+ "@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: "The requested resource was not found"
+ otherAttributes:
+ type: "object"
GetMapLayerSummaryAvailableLinks:
properties:
self:
- example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID
- description: This Map Layer Summary Link.
+ 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.
+ 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.
+ 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.
+ 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.
-
-
-
-
-
-
-
-
-
- Metadata:
- required:
- - name
- - value
- type: object
- properties:
- '@type':
- 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
+ example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers"
+ description: "Create Map Layers Link."
+ Link:
+ type: "object"
properties:
- '@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'
-
+ "@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.
+ 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
+ - "minimumLatitude"
+ - "maximumLatitude"
+ - "minimumLongitude"
+ - "maximumLongitude"
+ type: "object"
properties:
- '@type':
- type: string
- example: MapExtent
+ "@type":
+ type: "string"
+ example: "MapExtent"
minimumLatitude:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: 41.47187948123269
maximumLatitude:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: 41.48192734153501
minimumLongitude:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: -90.43179946950056
maximumLongitude:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: -90.4157062154112
-
+ MapLayerCollection:
+ type: "object"
+ allOf:
+ - $ref: "#/components/schemas/CollectionBase"
+ - properties:
+ values:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/ContributedMapLayer"
+ 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
+ type: "object"
properties:
- '@type':
- type: string
- example: MapLegend
+ "@type":
+ type: "string"
+ example: "MapLegend"
unitId:
- type: string
- description: The unit of Legand
- example: seeds1ha-1
+ type: "string"
+ description: "The unit of Legand"
+ example: "seeds1ha-1"
ranges:
- type: array
+ type: "array"
items:
- $ref: '#/components/schemas/MapLegendItem'
-
+ $ref: "#/components/schemas/MapLegendItem"
MapLegendItem:
- type: object
+ type: "object"
properties:
- '@type':
- type: string
- example: MapLegendItem
+ "@type":
+ type: "string"
+ example: "MapLegendItem"
label:
- type: string
- description: A label for the color
- example: Most profitable
+ type: "string"
+ description: "A label for the color"
+ example: "Most profitable"
minimum:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: 10.09
maximum:
- type: number
- format: double
+ 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'
+ type: "string"
+ description: "The hex color code corresponding to a color in the map layer image"
+ example: "#0BA74A"
percent:
- type: number
- format: double
+ type: "number"
+ format: "double"
example: 3.5
-
- FileResource:
+ Metadata:
required:
- - links
- - metadata
- type: object
+ - "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."
+ PostContributedMapLayerSummary:
properties:
- '@type':
- type: string
- 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'
-
- 400Errors:
+ 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"
+ PostRequest:
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:
+ 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:
- '@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: 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": {}
- }
+ 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"
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag2: "ag2"
+ ag3: "ag3"
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..86bb45b 100644
--- a/specs/raw/products.yaml
+++ b/specs/raw/products.yaml
@@ -1,1329 +1,1305 @@
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"
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:
get:
tags:
- - Varieties
- summary: View varieties for an org
- description: This endpoint will retrieve a collection of varieties for the specified org.
+ - "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'
+ - $ref: "#/components/parameters/OrganizationID"
+ - $ref: "#/components/parameters/ArchiveStatus"
+ - $ref: "#/components/parameters/VarietyEmbed"
security:
- - OAuth2: [ eq1 ]
+ - 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.
+ "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'
+ $ref: "#/components/schemas/VarietyCollection"
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:
- - '@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
+ - "@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
+ - "@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'
+ modifiedTime: "2024-12-06T07:52:51.267Z"
+ referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2"
+ referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2"
archived: false
- countryCode: USA
+ 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'
+ - "@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
+ - "@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: [ ]
-
+ 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
+ - "@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'
+ referenceGuid: "1a63a1fe-b00f-403f-81f7-c157e0234cc4"
+ referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2"
archived: false
- countryCode: USA
+ 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'
-
+ - "@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
+ - "@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'
+ referenceGuid: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa"
+ referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2"
archived: false
- countryCode: USA
+ 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'
+ - "@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
-
+ - "@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.
+ - "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'
+ - $ref: "#/components/parameters/OrganizationID"
security:
- - OAuth2: [ eq2 ]
+ - OAuth2:
+ - "eq2"
requestBody:
- description: The product to add.
+ description: "The product to add."
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/PostVariety'
+ $ref: "#/components/schemas/PostVariety"
examples:
No Header:
value:
- name: 2C788A SXRA COR
- companyName: MYCOGEN SEEDS
- cropName: CORN_WET
- category: VARIETY
+ 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'
+ createdTime: "2017-03-21T21:12:53.865Z"
+ modifiedTime: "2018-04-06T15:12:52.910Z"
responses:
- 201:
+ "201":
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/responses/Created'
+ $ref: "#/components/responses/Created"
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.
+ 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'
- 409:
- description: A product already exists in this org with the specified reference Erid
+ $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
+ 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/{organizationId}/varieties/{erid}:
get:
- summary: View a specific variety
- description: This endpoint will return the variety with the specified erid.
+ 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'
+ - $ref: "#/components/parameters/OrganizationID"
+ - $ref: "#/components/parameters/ERID"
+ - $ref: "#/components/parameters/VarietyEmbed"
security:
- - OAuth2: [ eq1 ]
+ - OAuth2:
+ - "eq1"
responses:
- 200:
- description: A variety object
+ "200":
+ description: "A variety object"
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/Variety'
+ $ref: "#/components/schemas/Variety"
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': Variety
- id: 8e1e0920-1265-4066-8067-8ce2ce5012b2
- name: '1299'
- cropName: Cornell
- companyName: Curry Seed
+ "@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
+ 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'
+ - "@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: []
+ - "@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": "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.
+ 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'
+ - $ref: "#/components/parameters/OrganizationID"
+ - $ref: "#/components/parameters/ERID"
security:
- - OAuth2: [ eq2 ]
+ - OAuth2:
+ - "eq2"
requestBody:
- description: The updated variety object.
+ description: "The updated variety object."
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/PutVariety'
+ $ref: "#/components/schemas/PutVariety"
examples:
No Header:
value:
- name: '1299'
- companyName: Curry Seed
- cropName: SOYBEANS
+ name: "1299"
+ companyName: "Curry Seed"
+ cropName: "SOYBEANS"
archived: true
- createdTime: '2019-03-28T14:59:57.000Z'
- modifiedTime: '2019-03-27T14:59:57.000Z'
+ createdTime: "2019-03-28T14:59:57.000Z"
+ modifiedTime: "2019-03-27T14:59:57.000Z"
responses:
- 204:
- description: The update was completed successfully
+ "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/{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.
+ 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:
- 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.
+ $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
+ 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"
/varieties:
get:
tags:
- - Reference Varieties
- summary: Search reference catalog varieties
+ - "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.
+ - 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.
+ - 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
+ type: "string"
+ example: "venture"
required: true
- - name: cropName
- in: query
- description: Filters the results by crop id (see the /cropTypes API).
+ - 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.
+ 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'
+ 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.
+ - 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'
+ 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.
+ - 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.
+ 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'
+ type: "string"
+ example: "USA"
responses:
- 200:
- description: A collection of reference varieties matching the specified search criteria.
+ "200":
+ description: "A collection of reference varieties matching the specified search criteria."
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/ReferenceVarietyCollection'
+ $ref: "#/components/schemas/ReferenceVarietyCollection"
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/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'
+ - "@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.
-
+ 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.
+ - "Reference Varieties"
+ summary: "Get a single reference variety."
security:
- - OAuth2: [ eq1 ]
- description: Single variety from industry data sources, such as CDMS.
+ - OAuth2:
+ - "eq1"
+ description: "Single variety 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 variety matching the specified erid."
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/ReferenceVariety'
+ $ref: "#/components/schemas/ReferenceVariety"
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": "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.
- '/varieties/{erid}/documents':
+ 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.
+ - "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.
+ - OAuth2:
+ - "eq1"
+ description: "List of all the documents for a variety 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 seed variety."
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: '#/components/schemas/DocumentCollection'
+ $ref: "#/components/schemas/DocumentCollection"
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"
+ "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.
+ - "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.
+ - 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'
+ - $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/CommonProductPointerRequest"
examples:
No Header:
value:
overrides:
- - key: archived
+ - key: "archived"
value: true
responses:
- 200:
- description: Successful update of overrides of reference variety associated to your org.
+ "200":
+ description: "Successful update of overrides of reference variety 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"
examples:
Headers:
- description: '200 OK'
+ description: "200 OK"
value:
- - key: archived
+ - key: "archived"
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'
+ 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.
+ 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
+ type: "string"
enum:
- - AVAILABLE
- - ARCHIVED
- - ALL
- example: AVAILABLE
- OrganizationID:
- in: path
- name: organizationId
- description: The identifier of the Organization.
+ - "AVAILABLE"
+ - "ARCHIVED"
+ - "ALL"
+ example: "AVAILABLE"
+ 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: integer
- example: 6781
- format: int64
+ 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"
OrgId:
- name: orgId
- in: path
- description: The organization owning the varieties.
+ name: "orgId"
+ in: "path"
+ description: "The organization owning the varieties."
required: true
schema:
- type: number
+ 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
+ OrganizationID:
+ in: "path"
+ name: "organizationId"
+ description: "The identifier of the Organization."
+ required: true
schema:
- type: string
- example: documents
- Embed2:
- name: embed
- in: query
- description: Embeds extra information in the variety response
+ type: "integer"
+ example: 6781
+ format: "int64"
+ RecordFilter:
+ name: "recordFilter"
+ in: "query"
+ description: "Filter results based on status"
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.
+ type: "string"
+ example: "active, archived, all"
+ VarietyEmbed:
+ in: "query"
+ name: "embed"
+ description: "An embeddable list of properties which are optional by default."
schema:
- type: string
- example: 9r8392615e4b4e1c92018026f47109bb
+ type: "array"
+ items:
+ type: "string"
+ enum:
+ - "documents"
+ - "showMergedProducts"
VarietyId:
- name: varietyId
- in: path
- description: The variety Id to find.
+ name: "varietyId"
+ in: "path"
+ description: "The variety Id to find."
required: true
schema:
- type: string
- example: 8e1e0920-1265-4066-8067-8ce2ce5012b2
+ type: "string"
+ example: "8e1e0920-1265-4066-8067-8ce2ce5012b2"
VarietyId2:
- name: varietyId
- in: path
- description: The variety Id
+ 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
+ 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
- format: uuid
- securitySchemes:
- OAuth2:
- type: oauth2
- flows:
- clientCredentials:
- scopes:
- ag2: 'ag2'
- ag3: 'ag3'
+ type: "string"
+ example: "9r8392615e4b4e1c92018026f47109bb"
+ responses:
+ Created:
+ description: "Created"
schemas:
+ 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
+ type: "object"
properties:
- '@type':
- type: string
- example: BaseResource
+ "@type":
+ type: "string"
+ example: "BaseResource"
id:
- description: Primary identifier for resource.
- type: string
- format: uuid
- example: 1f8c12b4-126f-11ec-82a8-0242ac130003
+ description: "Primary identifier for resource."
+ type: "string"
+ format: "uuid"
+ example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
+ 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
+ CommonProductPointerRequest:
+ type: "object"
+ properties:
+ overrides:
+ nullable: true
+ type: "array"
+ items:
+ $ref: "#/components/schemas/OverrideKeyValuePair"
Document:
- type: object
+ type: "object"
allOf:
- properties:
- '@type':
- example: 'Document'
+ "@type":
+ example: "Document"
required: true
erid:
- type: string
- description: Unique id of the document
- example: '08e930ee-4c31-41b6-b57e-8c0a8e1284a4'
+ 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.
+ 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.
+ 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.
+ 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.
+ type: "string"
+ example: "ld7OD026.pdf"
+ description: "The filename of the document."
required: true
expirationDate:
- type: string
- format: date
- example: '2017-03-22'
+ type: "string"
+ format: "date"
+ example: "2017-03-22"
readOnly: true
nullable: true
required:
- - '@type'
- - productErid
- - docType
- - description
- - fileName
+ - "@type"
+ - "productErid"
+ - "docType"
+ - "description"
+ - "fileName"
DocumentCollection:
- type: object
+ type: "object"
allOf:
- - $ref: '#/components/schemas/CollectionBase'
+ - $ref: "#/components/schemas/CollectionBase"
- properties:
values:
- type: array
+ type: "array"
items:
- $ref: '#/components/schemas/Document'
- BaseResource:
- type: object
+ $ref: "#/components/schemas/Document"
+ Errors:
+ type: "object"
+ format: "Errors/DataValidationException"
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.
+ "@type":
+ type: "string"
+ example: "Errors"
+ errors:
+ type: "array"
items:
- $ref: '#/components/schemas/Link'
- ReferenceVariety:
- type: object
- allOf:
- - $ref: '#/components/schemas/BaseResource'
- - properties:
- '@type':
- example: 'ReferenceVariety'
- id:
- 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
- enum:
- - 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 name of the input manufacturer.
- example: NK
- 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).
- 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: "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
+ 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"
Link:
- type: object
+ type: "object"
properties:
- '@type':
- type: string
- example: 'Link'
- description: 'The type of the link.'
+ "@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.
+ 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:
- - $ref: '#/components/schemas/CollectionBase'
- - properties:
- values:
- type: array
- items:
- $ref: '#/components/schemas/ReferenceVariety'
+ type: "string"
+ format: "uri"
+ example: "api_route"
+ description: "The location of the resource"
OverrideKeyValuePair:
- 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"
value:
nullable: false
- type: object
- description: 'Value for override parameter, can be string, number or boolean'
+ 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:
- type: string
- example: USA
- description: Country of the product to which it belongs.
- required: true
- - $ref: '#/components/schemas/CommonProductPointerRequest'
-
- VarietyCollection:
- type: object
+ - "key"
+ - "value"
+ PostVariety:
+ 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'
+ "@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"
PutVariety:
- type: object
+ type: "object"
allOf:
- properties:
- '@type':
- example: 'Variety'
+ "@type":
+ example: "Variety"
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."
required: true
cropName:
- type: string
- example: SOYBEANS
+ 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.'
+ 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
+ type: "string"
+ description: "The brand of the variety."
+ example: "NK"
required: true
category:
- type: string
+ type: "string"
enum:
- - VARIETY
- example: VARIETY
+ - "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.
+ 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
+ type: "string"
+ format: "date-time"
example: "2019-03-27T14:59:57.000Z"
- description: product created time
+ description: "product created time"
modifiedTimeDEPRECATED:
- type: string
- format: date-time
+ type: "string"
+ format: "date-time"
example: "2019-03-27T14:59:57.000Z"
- description: product modified time
+ description: "product modified time"
required:
- - name
- - cropName
- - companyName
- VarietyIdUpdate:
+ - "name"
+ - "cropName"
+ - "companyName"
+ ReferenceProductOverrideStatus:
+ type: "object"
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
+ 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"
+ ReferenceProductPointerRequest:
+ allOf:
+ - properties:
+ countryCode:
+ type: "string"
+ example: "USA"
+ description: "Country of the product to which it belongs."
+ required: true
+ - $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/Document'
- description: List of documents for the variety. For example, Tech Sheet, SDS Label.
+ $ref: "#/components/schemas/ReferenceVariety"
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."
+ securitySchemes:
+ OAuth2:
+ type: "oauth2"
+ flows:
+ clientCredentials:
+ scopes:
+ ag2: "ag2"
+ ag3: "ag3"
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..3792f93 100644
--- a/specs/raw/webhook.yaml
+++ b/specs/raw/webhook.yaml
@@ -1,128 +1,117 @@
-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:
/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 +119,579 @@ 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"
+ 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"
+ 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
- values:
- - '123456'
- - key: fieldOperationType
+ - key: "orgId"
values:
- - seeding
- - key: cropSeason
+ - "123456"
+ - key: "fieldOperationType"
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
- content:
- application/vnd.deere.axiom.v3+json:
- schema:
- $ref: '#/components/schemas/Errors'
-
-
+ 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"
+ 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:
- description: Links to other resources.
- example: See the sample response below
- type: array
-
+ $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"
+ Errors:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/Error"
+ 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."
properties:
- eventTypeId:
- $ref: '#/components/schemas/EventTypeId'
- filters:
- type: array
+ key:
+ type: "string"
+ example: "orgId"
+ values:
+ type: "array"
items:
- $ref: '#/components/schemas/Filter'
- targetEndpoint:
- $ref: '#/components/schemas/HttpsSubscription'
- status:
- type: string
- enum: [Active]
- default: Active
- displayName:
- type: string
- example: mySubscribedEndPoint
+ 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 well be sent with each delivery to validate the sender. Accepts the base 64 character set.
- example: 'abc123ABC+/='
+ 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:
- - eventTypeId
- - targetEndpoint
-
- Filter:
- type: object
- description: Consists of a key and list of values used to filter events based on metadata.
+ - "clientKey"
+ - "eventTypeId"
+ - "targetResource"
+ - "metadata"
+ - "links"
+ HTTPTargetEndpointEventMetadata:
+ type: "object"
+ description: "Generic key value pair"
properties:
key:
- type: string
- example: orgId
- values:
- type: array
- items:
- type: string
- example: '1234'
+ 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:
- - key
- - values
-
+ - "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"
+ 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
- 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
+ SubscriptionResponseContentPut:
+ description: "A subscription response"
+ type: "object"
properties:
- clientKey:
- type: string
- example: johndeere-abcdef
- readOnly: true
+ targetEndpoint:
+ example: "See the sample response below"
+ type: "---"
+ description: "The postback endpoint that receives the event(s)."
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]
-
- 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: "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}$'"
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 2969e7a..e3151d0 100644
--- a/src/api/equipment.ts
+++ b/src/api/equipment.ts
@@ -72,53 +72,6 @@ export class EquipmentApi {
);
}
- /**
- * 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);
- }
-
/**
* View equipment details by Id
* @description This resource allows the client to view the details of one
@@ -167,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
@@ -206,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
@@ -379,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..c170e56 100644
--- a/src/api/field-operations-api.ts
+++ b/src/api/field-operations-api.ts
@@ -17,6 +17,66 @@ 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);
+ }
+
+ /**
+ * 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 +147,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/flags.ts b/src/api/flags.ts
index 678942f..1588deb 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,39 +47,51 @@ 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);
+ const path = `/organizations/${orgId}/fields/${fieldId}/flags${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}
+ * Get all items (follows pagination automatically)
+ * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags
*/
- async update(
+ async listAll(
orgId: string,
- flagId: string,
- data: components['schemas']['ValuesFlagIdPut'],
+ fieldId: string,
+ params?: {
+ embed?: string;
+ startTime?: string;
+ endTime?: string;
+ categoryIDs?: string;
+ categoryNames?: string;
+ recordFilter?: string;
+ shapeTypes?: string;
+ simple?: boolean;
+ metadataOnly?: boolean;
+ },
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);
+ ): 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));
+ if (params?.endTime !== undefined) query.set('endTime', String(params.endTime));
+ if (params?.categoryIDs !== undefined) query.set('categoryIDs', String(params.categoryIDs));
+ if (params?.categoryNames !== undefined)
+ query.set('categoryNames', String(params.categoryNames));
+ if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter));
+ 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);
}
/**
@@ -139,14 +151,13 @@ export class FlagsApi {
}
/**
- * 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
+ * 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 list(
+ async get(
orgId: string,
- fieldId: string,
+ flagId: string,
params?: {
embed?: string;
startTime?: string;
@@ -154,12 +165,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));
@@ -168,51 +180,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.get>(
- this.spec,
- path,
- options
- );
+ const path = `/organizations/${orgId}/flags/${flagId}${queryString ? `?${queryString}` : ''}`;
+ return this.client.get(this.spec, path, options);
}
+
/**
- * Get all items (follows pagination automatically)
- * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags
+ * Update flag by id
+ * @description This resource will update flag by Organization and Flag Id.
+ * @generated from PUT /organizations/{orgId}/flags/{flagId}
*/
- async listAll(
+ async update(
orgId: string,
- fieldId: string,
- params?: {
- embed?: string;
- startTime?: string;
- endTime?: string;
- categoryIDs?: string;
- categoryNames?: string;
- recordFilter?: string;
- shapeTypes?: string;
- simple?: boolean;
- metadataOnly?: boolean;
- },
+ flagId: string,
+ data: components['schemas']['ValuesFlagIdPut'],
options?: RequestOptions
- ): 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));
- if (params?.endTime !== undefined) query.set('endTime', String(params.endTime));
- if (params?.categoryIDs !== undefined) query.set('categoryIDs', String(params.categoryIDs));
- if (params?.categoryNames !== undefined)
- query.set('categoryNames', String(params.categoryNames));
- if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter));
- 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);
+ ): 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/map-layers.ts b/src/api/map-layers.ts
index 07690ab..8c89426 100644
--- a/src/api/map-layers.ts
+++ b/src/api/map-layers.ts
@@ -17,6 +17,34 @@ export class MapLayersApi {
constructor(private readonly client: DeereClient) {}
+ /**
+ * 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 Layer Summaries
* @description This resource will list all Map Layer Summaries for a
@@ -70,34 +98,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..baf5f20 100644
--- a/src/api/products.ts
+++ b/src/api/products.ts
@@ -121,25 +121,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 +170,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/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 2025026..ba4530d 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
@@ -1092,6 +817,43 @@ export interface components {
*/
ERID?: string;
};
+ /**
+ * 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"
+ * }
+ * }
+ */
+ 'device-model': components['schemas']['resource-embed'] & {
+ /**
+ * @description DeviceModel
+ * @example DeviceModel
+ * @enum {string}
+ */
+ '@type'?: 'DeviceModel';
+ /**
+ * @description The name of the device model.
+ * @example JDLink Modem-4G
+ */
+ name?: string;
+ /**
+ * @description Unique identifier of the device model.
+ * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3
+ */
+ ERID?: string;
+ make?: components['schemas']['device-make'];
+ type?: components['schemas']['device-type'];
+ };
/**
* DeviceType
* @description Represents the type of a device, including its name, common name, and unique identifier (ERID).
@@ -1124,636 +886,896 @@ export interface components {
*/
ERID?: string;
};
+ /** Display */
+ display: components['schemas']['device'] & {
+ /**
+ * @description Display
+ * @example Display
+ * @enum {string}
+ */
+ '@type'?: 'Display';
+ monitors?: components['schemas']['display-monitors'][];
+ };
+ /** Monitor */
+ 'display-monitors': components['schemas']['resource-embed'] & {
+ /**
+ * @description Monitor
+ * @example Monitor
+ * @enum {string}
+ */
+ '@type'?: 'Monitor';
+ /** @example Monitor_0 */
+ type?: string;
+ /** @example PCG410A015392 */
+ serialNumber?: string;
+ /** @example 800 */
+ resolutionWidth?: number;
+ /** @example 600 */
+ resolutionHeight?: number;
+ };
/**
- * 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"
- * }
- * }
+ * Equipment
+ * @description Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes.
*/
- 'device-model': components['schemas']['resource-embed'] & {
+ equipment: components['schemas']['resource'] & {
/**
- * @description DeviceModel
- * @example DeviceModel
+ * @description Equipment | Machine | Implement
+ * @example Equipment
* @enum {string}
*/
- '@type'?: 'DeviceModel';
+ '@type'?: 'Equipment' | 'Machine' | 'Implement';
/**
- * @description The name of the device model.
- * @example JDLink Modem-4G
+ * @description Equipment Name.
+ * @example Cates 8360R 055358
*/
name?: string;
/**
- * @description Unique identifier of the device model.
- * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3
+ * @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;
- make?: components['schemas']['device-make'];
- type?: components['schemas']['device-type'];
+ /** @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'];
};
/**
- * Version
- * @description Represents the version of a device or software, including its name.
+ * EquipmentIsgType
+ * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata.
* @example {
- * "name": "3.16.1171"
+ * "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"
+ * }
* }
*/
- version: components['schemas']['resource-embed'] & {
+ 'equipment-isg-type': components['schemas']['resource'] & {
/**
- * @description Version
- * @example Version
+ * @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}
*/
- '@type'?: 'Version';
+ category?: 'Machine' | 'Implement' | 'Unknown';
/**
- * @description The name of the version.
- * @example 3.16.1171
+ * @description Indicates if the equipment ISG type allows custom models.
+ * @example true
*/
- name?: string;
- };
- /** InabilityDetail */
- 'inability-detail': components['schemas']['resource'] & {
- /** @example RC14.8.1 */
- code?: string;
- /** @example REGISTRATION */
- type?: string;
- /** @example SIM registration is required */
- description?: string;
+ 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;
};
/**
- * Capability
- * @description List of capabilities of the equipment.
+ * EquipmentISGType
+ * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata.
*/
- capability: components['schemas']['resource-embed'] & {
+ 'equipment-isg-type-embed': {
/**
- * @description Capability
- * @example Capability
- * @enum {string}
+ * @description EquipmentISGType
+ * @example EquipmentISGType
*/
- '@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'?: 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;
};
/**
- * Equipment
- * @description Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes.
+ * 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"
+ * }
+ * }
*/
- equipmentForList: components['schemas']['resource'] & {
- /**
- * @description Equipment | Machine | Implement
- * @example Equipment
- * @enum {string}
- */
- '@type'?: 'Equipment' | 'Machine' | 'Implement';
+ 'equipment-make': components['schemas']['resource'] & {
/**
- * @description Equipment Name.
- * @example Cates 8360R 055358
+ * @description The name of the equipment make.
+ * @example JOHN DEERE
*/
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
+ * @description Unique identifier for the equipment make.
+ * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3
*/
- serialNumber?: string;
+ ERID?: string;
/**
- * @description VIN or PIN, more than Serial Number, of the Engine.
- * @example RG6090L839275
+ * @description Indicates if the equipment make is certified.
+ * @example true
*/
- engineSerialNumber?: string;
+ certified?: boolean;
/**
- * @description True if this is an official equipment (we have PI information about it).
+ * @description Indicates if the equipment make is deereOrSubsidiary.
* @example true
*/
- isSerialNumberCertified?: boolean;
+ deereOrSubsidiary?: boolean;
/**
- * @description Year of model.
- * @example 2019
+ * @description Indicates if the equipment make is deprecated.
+ * @example false
*/
- 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'];
+ 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 capable of telematics.
- * @example true
+ * @description EquipmentMake
+ * @example EquipmentMake
*/
- telematicsCapable?: boolean;
+ '@type'?: string;
/**
- * @description Indicates if the equipment is archived.
- * @example true
+ * @description Unique identifier for the equipment make.
+ * @example 1
*/
- archived?: boolean;
+ id?: string;
/**
- * @description Unique id for principal equipment
- * @example 12345
+ * @description The name of the equipment make.
+ * @example JOHN DEERE
*/
- 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 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,67 +1787,74 @@ 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?: unknown;
+ };
+ };
+ };
+ /** @description A collection of Assets */
+ GetEquipmentById: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/json': {
+ values?: unknown;
+ };
+ };
+ };
+ /** @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;
};
@@ -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..5ddfc8b 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}': {
+ '/fieldOps/{operationId}': {
parameters: {
query?: never;
header?: never;
@@ -66,16 +51,25 @@ 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.
+ * 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 .
*/
get: {
parameters: {
query?: {
- /** @description List available operation measurement types and totals. */
- embed?: components['parameters']['FieldEmbed'];
+ /** @description If true, this will download the shapefile in small 20MB pieces */
+ splitShapeFile?: components['parameters']['SplitShapeFile'];
+ /** @description Choose between point-based and polygon-based shapefiles. Accepted values are "Point" and "Polygon". */
+ shapeType?: components['parameters']['ShapeType'];
+ /** @description Choose a data resolution for the shapefile. Accepted values are "EachSection", "EachSensor", and "OneHertz". */
+ resolution?: components['parameters']['Resolution'];
+ };
+ 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 . */
+ 'Accept-UOM-System'?: components['parameters']['Accept-UOM-System'];
+ /** @description Desired yield representation (unit) type. Accepted values are VOLUME or MASS. */
+ 'Accept-Yield-Preference'?: components['parameters']['Accept-Yield-Preference'];
};
- header?: never;
path: {
/** @description Operation ID */
operationId: components['parameters']['OperationId'];
@@ -84,9 +78,11 @@ export interface paths {
};
requestBody?: never;
responses: {
- 200: components['responses']['FieldOperationId'];
+ 202: components['responses']['RequestHasBeenAccepted'];
+ 307: components['responses']['RedirectToPreSignedURL'];
403: components['responses']['DoesNotHaveAccessToFieldOperations'];
404: components['responses']['InputFieldOperationValueIsInvalid'];
+ 406: components['responses']['RequestHasNotBeenAccepted'];
};
};
put?: never;
@@ -97,7 +93,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/fieldOps/{operationId}': {
+ '/organizations/{orgId}/fields/{fieldId}/fieldOperations': {
parameters: {
query?: never;
header?: never;
@@ -105,38 +101,42 @@ export interface paths {
cookie?: never;
};
/**
- * 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 .
+ * 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 If true, this will download the shapefile in small 20MB pieces */
- splitShapeFile?: components['parameters']['SplitShapeFile'];
- /** @description Choose between point-based and polygon-based shapefiles. Accepted values are "Point" and "Polygon". */
- shapeType?: components['parameters']['ShapeType'];
- /** @description Choose a data resolution for the shapefile. Accepted values are "EachSection", "EachSensor", and "OneHertz". */
- resolution?: components['parameters']['Resolution'];
+ /** @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 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'?: components['parameters']['Accept-UOM-System'];
- /** @description Desired yield representation (unit) type. Accepted values are VOLUME or MASS. */
- 'Accept-Yield-Preference'?: components['parameters']['Accept-Yield-Preference'];
+ /** @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 Operation ID */
- operationId: components['parameters']['OperationId'];
+ /** @description Owning Organization ID */
+ orgId: components['parameters']['OrgId'];
+ /** @description Field ID */
+ fieldId: components['parameters']['FieldId'];
};
cookie?: never;
};
requestBody?: never;
responses: {
- 202: components['responses']['RequestHasBeenAccepted'];
- 307: components['responses']['RedirectToPreSignedURL'];
+ 200: components['responses']['FieldOperations'];
403: components['responses']['DoesNotHaveAccessToFieldOperations'];
- 404: components['responses']['InputFieldOperationValueIsInvalid'];
- 406: components['responses']['RequestHasNotBeenAccepted'];
+ 404: components['responses']['RequestedResourceNotFound'];
};
};
put?: never;
@@ -151,153 +151,165 @@ export interface paths {
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 Organizations Link.
- * @example https://sandboxapi.deere.com/platform/organizations/123456
- */
- organization?: unknown;
- /**
- * @description Fields Link.
- * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27
- */
- field?: unknown;
- /**
- * @description Field Operation Measurements Link.
- * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes
- */
- measurementTypes?: unknown;
- /**
- * @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
- */
- measurement?: unknown;
- /**
- * @description Clients Link.
- * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0
- */
- client?: unknown;
- /**
- * @description Farms Link.
- * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0
- */
- farm?: unknown;
+ /** @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'];
};
- Link: string;
- /** @description A link provides a URI to access resources that are related to the response. */
- FieldLink: {
- /**
- * @description The relation of the object to the linked resource.
- * @example field
- */
- rel?: string;
+ /** @description A general representation of an observed value. */
+ EventObservation: {
+ /** @example EventObservation */
+ '@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
+ * @description The observed value, e.g. NW wind direction.
+ * @example NW
*/
- uri?: string;
+ value?: 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: {
- /**
- * @description Globally unique identifier for this client.
- * @example 66dd9c64-71d7-4904-86f8-e04d40ccf59d
- */
- id?: string;
- links?: components['schemas']['Link'][];
- /**
- * @description The name of the client.
- * @example My Custom Client Name
- */
- name?: string;
- /** @example false */
- archived?: boolean;
+ /** @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: {
@@ -336,409 +348,218 @@ export interface components {
*/
lastModifiedTime?: string;
};
- /**
- * Format: int64
- * @description The organization owning the fields and associated operations
- * @example 123456
- */
- OrgId: number;
- TankMixProduct: {
- guid?: components['schemas']['ProductErid'];
+ /** @description A link provides a URI to access resources that are related to the response. */
+ FieldLink: {
/**
- * @description Flag indicating whether the product is a tank mix (true) or a single component (false).
- * @example true
+ * @description The relation of the object to the linked resource.
+ * @example field
*/
- tankMix?: boolean;
- rate?: components['schemas']['EventMeasurement'];
- carrier?: components['schemas']['Component'];
- components?: components['schemas']['Component'][];
+ rel?: string;
+ /**
+ * Format: uri
+ * @description The URI to the related resource.
+ * @example https://sandboxapi.deere.com/platform/organizations/1234/fields/e48a7dd0-9af2-44e1-81b4-435d494f7cd5
+ */
+ uri?: string;
};
- NonTankMixProduct: {
- /** @example Product */
- '@type'?: string;
- guid?: components['schemas']['ProductErid'];
- productType?: components['schemas']['FieldOperationProductTypesEnum'];
+ FieldOperation: {
/**
- * @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 Field Operation ID
+ * @example MjkyMDdfNT
*/
- name?: string;
+ id?: string;
/**
- * @description The brand name of product.
- * @example BrandForProducts
+ * @description A new x-deere-signature response header will be included if the response has changed since last api call.
+ * @example 520122365ebb4870a344784570d202c7
*/
- brand?: string;
- agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber'];
+ 'x-deere-signature'?: string;
/**
- * @description Flag indicating whether the product is a tank mix (true) or a single component (false).
- * @example false
+ * @description Field Operation type.
+ * @example application
*/
- tankMix?: boolean;
- };
- /** @description An individual product combined with others in a tank mix. */
- Component: {
- /** @example Component */
- '@type'?: string;
+ fieldOperationType?: string;
/**
- * @description Display recorded Component GUID.
- * @example fa14f029-831c-456b-a76e-2d3c26207c19
+ * @description Crop season year.
+ * @example 2015
*/
- guid?: string;
+ cropSeason?: string;
/**
- * @description The general name of the product.
- * @example Water
+ * @description The type of machine that generated the field operation. This may be "unknown".
+ * @example unknown
+ */
+ 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[];
+ /**
+ * @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;
- agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber'];
- rate?: components['schemas']['EventMeasurement'];
+ /**
+ * @description Boolean flag as to whether the application operation was for a tank mix or not.
+ * @example true
+ */
+ tankMix?: boolean;
+ /**
+ * @description Rate of the application. Includes value and unitId data.
+ * @example See sample response below.
+ */
+ rate?: unknown;
+ /**
+ * @description Numeric value.
+ * @example 10
+ */
+ value?: number;
+ /**
+ * @description Unit of value.
+ * @example gal1ac-1
+ */
+ 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.
+ * @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'][];
+ };
+ 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
- */
- 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'];
- };
- /**
- * @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.
- * @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 Category
- * @enum {string}
- */
- FieldOperationMeasurementCategoryEnum: 'Target' | 'Result' | 'Prescription';
- FieldOperationLayersEnum: string &
- components['schemas']['FieldOperationMeasurementLayersEnum'] &
- components['schemas']['FieldOperationIndexLayersEnum'] &
- components['schemas']['FieldOperationCompositeLayersEnum'];
- /**
- * @description Layers based on variable rate measurements recorded during the field operation. They will use EventMeasurementStats for statistics.
- * @enum {string}
- */
- FieldOperationMeasurementLayersEnum:
- | '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';
- /**
- * @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
+ * @description Layers based on defined comparisons of other layers
* @enum {string}
*/
FieldOperationCompositeLayersEnum: 'QualityTarget' | 'QualityPrescription';
- FieldOperation: {
- /**
- * @description Field Operation ID
- * @example MjkyMDdfNT
- */
- id?: string;
+ FieldOperationGeoTIFFLocation: {
/**
- * @description A new x-deere-signature response header will be included if the response has changed since last api call.
- * @example 520122365ebb4870a344784570d202c7
+ * 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
*/
- 'x-deere-signature'?: string;
+ location?: string;
+ mapLegend?: components['schemas']['MapLegend'];
+ extent?: components['schemas']['MapExtent'];
+ };
+ FieldOperationId: {
/**
- * @description Field Operation type.
- * @example application
+ * @description The organization ID.
+ * @example 1234
*/
- fieldOperationType?: string;
+ orgId?: string;
/**
- * @description Crop season year.
+ * @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 The type of machine that generated the field operation. This may be "unknown".
- * @example unknown
- */
- adaptMachineType?: string;
- /**
- * Format: date-time
- * @description Starting date and time of this field operation..
- * @example 2015-05-29T22:00:19.200Z
+ * @description A string indicating the type of operation (valid values include: seeding, application, harvest, or tillage).
+ * @example Harvest
*/
- startDate?: string;
+ fieldOperationType?: string;
/**
- * Format: date-time
- * @description Ending date and time of this field operation.
- * @example 2015-05-29T22:23:53.746Z
+ * 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
*/
- endDate?: string;
+ cropName?: string;
/**
* Format: date-time
* @description Last time that anything was modified on this field operation.
- * @example 2016-04-29T22:12:53.446Z
+ * @example 2018-11-17T11:53:00.000Z
*/
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;
- /**
- * @description Rate of the application. Includes value and unitId data.
- * @example See sample response below.
- */
- rate?: unknown;
- /**
- * @description Numeric value.
- * @example 10
- */
- value?: number;
- /**
- * @description Unit of value.
- * @example gal1ac-1
- */
- 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.
- * @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;
- /**
- * @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
+ * @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'][];
};
- UpdateFieldOperation: {
- cropSeason?: components['schemas']['CropSeason'];
- cropName?: components['schemas']['CropToken'];
- varieties?: (
- | components['schemas']['NameToEridEdit']
- | components['schemas']['EridToEridEdit']
- )[];
- product?: {
- guid?: components['schemas']['ProductErid'];
- };
+ /**
+ * @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';
+ 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;
@@ -818,127 +639,370 @@ export interface components {
operators?: components['schemas']['Operator'][];
links?: components['schemas']['Link'][];
};
- UpdateFieldOperationMachine: {
+ /** @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: double
- * @description The calibration factor for this machine
- * @example 1.25
+ * Format: int64
+ * @description PrincipalId of the machine
+ * @example 637795
*/
- calibrationFactor?: number;
+ 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';
+ /** @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}
+ */
+ FieldOperationMeasurementLayersEnum:
+ | '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';
+ 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';
+ FieldOperationPNGImage: {
+ /**
+ * @description Base64 encoded PNG image
+ * @example data:image/png;base64,{base64EncodedContent}
+ */
+ 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: {
+ /**
+ * 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[];
};
+ /**
+ * @description The type of operation
+ * @example HARVEST
+ */
+ FieldOperationTypesEnum: string;
FieldOperationWorkNote: {
/** @example FieldOperationWorkNote */
'@type'?: string;
/**
- * Format: guid
- * @description eventId of the work note.
- * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98
+ * Format: guid
+ * @description eventId of the work note.
+ * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98
+ */
+ id: string;
+ /** @example note1 */
+ note: string;
+ /**
+ * Format: date-time
+ * @description Timestamp of the work note.
+ * @example 2018-08-27T08:08:08.000Z
+ */
+ 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 starting date of the operation in ISO-8601 format.
+ * @example 2018-08-27T08:08:08.000Z
+ */
+ startDate?: string;
+ /**
+ * Format: date-time
+ * @description The ending date of the operation in ISO-8601 format.
+ * @example 2019-08-27T08:08:08.000Z
+ */
+ 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: {
+ /**
+ * @description Organizations Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456
+ */
+ organization?: unknown;
+ /**
+ * @description Fields Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27
*/
- id: string;
- /** @example note1 */
- note: string;
+ field?: unknown;
/**
- * Format: date-time
- * @description Timestamp of the work note.
- * @example 2018-08-27T08:08:08.000Z
+ * @description Field Operation Measurements Link.
+ * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes
*/
- timestamp?: string;
- /** @description GPS location where the the work note was taken. */
- gpsLocation?: components['schemas']['Point'];
- };
- MapRangeForIndex: {
- /** @example MapLegendItem */
- '@type'?: string;
+ measurementTypes?: unknown;
/**
- * @description The string label for this range. Used for images that are not based on numerical values
- * @example Variety 1
+ * @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
*/
- label?: string;
+ 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;
/**
- * Format: int64
- * @description This is a placeholder for various index key
- * @example 55
+ * @description Asynchronous Shapefiles Link.
+ * @example https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg
*/
- key?: number;
- };
- MapRangeForMeasurement: {
- /** @example MapLegendItem */
- '@type'?: string;
+ shapeFileAsync?: unknown;
/**
- * Format: double
- * @description The inclusive minimum value included in this range
- * @example 13.15
+ * @description Link to work plan associated to the operation.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e
*/
- minimum?: number;
+ workPlans?: unknown;
+ };
+ LinkGETFieldOperationsId: {
/**
- * Format: double
- * @description The exclusive maximum value included in this range
- * @example 17.95
+ * @description Organizations Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456
*/
- maximum?: number;
+ organization?: unknown;
/**
- * @description The color used in the image for this rage
- * @example #cc0000
+ * @description Fields Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27
*/
- hexColor?: string;
+ field?: unknown;
/**
- * Format: double
- * @description The proportion of the field operation matching this range (not actually a percentage).
- * @example 0.15
+ * @description Field Operation Measurements Link.
+ * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes
*/
- percent?: number;
- };
- MapRangeForGeoTiff: {
- /** @example MapLegendItem */
- '@type'?: string;
+ measurementTypes?: unknown;
/**
- * @description The string label for this range. Used for images that are not based on numerical values
- * @example Variety 1
+ * @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
*/
- label?: string;
+ measurement?: unknown;
/**
- * Format: int64
- * @description This is a placeholder for GeoTiff based Index Key
- * @example 1
+ * @description Clients Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0
*/
- 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'];
+ client?: unknown;
/**
- * @description Units for the legend
- * @example lb1ac-1
+ * @description Farms Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0
*/
- unitId?: string;
- ranges?: components['schemas']['MapRange'][];
+ farm?: unknown;
};
/** @description The GPS extents of a map image */
MapExtent: {
@@ -963,175 +1027,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 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;
};
- /**
- * @description A general representation of quantity and unit.
- * @example {
- * "@type": "EventMeasurement",
- * "value": 17.13,
- * "unitId": "gal1ac-1"
- * }
- */
- EventMeasurement: {
- /** @example EventMeasurement */
+ 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 +1160,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 +1213,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 +1254,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;
+ TankMixProduct: {
+ guid?: components['schemas']['ProductErid'];
/**
- * @description The value that was supplied for this field in the request
- * @example Bad value
+ * @description Flag indicating whether the product is a tank mix (true) or a single component (false).
+ * @example true
*/
- invalidValue?: string;
+ tankMix?: boolean;
+ rate?: components['schemas']['EventMeasurement'];
+ carrier?: components['schemas']['Component'];
+ components?: components['schemas']['Component'][];
};
- /** 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[];
+ /**
+ * @description The type of display
+ * @enum {string}
+ */
+ 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'];
+ };
};
- 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;
+ UpdateFieldOperationMachine: {
/**
- * Format: date-time
- * @description The ending date of the operation in ISO-8601 format.
- * @example 2019-08-27T08:08:08.000Z
+ * @description Doc File based Field Operation Machine erid.
+ * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5
*/
- endDate?: string;
- embed?: ('client' | 'farm' | 'field' | 'fieldOperationMachines' | 'measurementTypes')[];
- };
- /**
- * @description Recorded Product Erid.
- * @example fa14f029-831c-456b-a76e-2d3c26207c19
- */
- ProductErid: string;
- /** @description Describes an edit that should change the id of any object that matches the name */
- NameToEridEdit: {
+ erid?: string;
/**
- * @description The name to match against
- * @example Variety A
+ * Format: double
+ * @description The calibration factor for this machine
+ * @example 1.25
*/
- 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'];
+ 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 +1348,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,62 +1375,54 @@ 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: {
- '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'][];
- };
+ 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 A field operation object */
- FieldOperation: {
+ /** @description The user has not been provided access to the Field Operation Measurements for this organization. */
+ DoesNotHaveAccessToFieldOperationMeasurements: {
headers: {
[name: string]: unknown;
};
- 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'][];
- };
+ 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 */
- FieldOperationId: {
+ FieldOperation: {
headers: {
[name: string]: unknown;
};
content: {
'application/vnd.deere.axiom.v3+json': {
- links?: components['schemas']['LinkGETFieldOperationsId'][];
+ links?: components['schemas']['LinkGETFieldOperations'][];
/**
* Format: int64
* @description Number of results in the list
* @example 70
*/
total?: number;
- values?: components['schemas']['FieldOperationId'][];
+ values?: components['schemas']['FieldOperation'][];
};
};
};
- /** @description A collection of field operation machines */
- FieldOperationMachines: {
+ /** @description Field Operation Statistics broken down according to the legend for another context. */
+ FieldOperationDataAnalysisStatistics: {
headers: {
[name: string]: unknown;
};
@@ -1434,66 +1435,82 @@ export interface components {
* @example 70
*/
total?: number;
- values?: components['schemas']['FieldOperationMachine'][];
+ values?: components['schemas']['MapRangeWithLayerStatistics'][];
};
};
};
- /** @description A collection of field operation work notes */
- FieldOperationWorkNotes: {
+ /** @description A field operation object */
+ FieldOperationId: {
headers: {
[name: string]: unknown;
};
content: {
'application/vnd.deere.axiom.v3+json': {
- links?: components['schemas']['Link'][];
+ links?: components['schemas']['LinkGETFieldOperationsId'][];
/**
* Format: int64
* @description Number of results in the list
- * @example 10
+ * @example 70
*/
total?: number;
- values?: components['schemas']['FieldOperationWorkNote'][];
+ values?: components['schemas']['FieldOperationId'][];
};
};
};
- /** @description A field operation work note object */
- FieldOperationWorkNote: {
+ /** @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: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationWorkNote'];
+ 'image/png': string;
};
};
- /** @description A collection of Field Operation Measurements */
- FieldOperationMeasurements: {
+ /** @description An Object of Field Operation layer legend */
+ FieldOperationLayerLegend: {
headers: {
[name: string]: unknown;
};
content: {
'application/vnd.deere.axiom.v3+json': {
- links?: components['schemas']['Link'][];
+ id?: components['schemas']['FieldOperationLayersEnum'];
/**
- * Format: int64
- * @description Number of results in the list
- * @example 70
+ * @description The unit associated to the quantity measured
+ * @example gal1ac-1.
*/
- total?: number;
- values?: components['schemas']['FieldOperationMeasurement'][];
+ 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 Measurements or image */
- FieldOperationMeasurementOrImage: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationMeasurement'];
- 'application/vnd.deere.axiom.v3.image+json': components['schemas']['FieldOperationPNGImage'];
- 'application/vnd.deere.axiom.v3.location+tif+json': components['schemas']['FieldOperationGeoTIFFLocation'];
- };
- };
/** @description An Object of Field Operation Statistics */
FieldOperationLayerStatistics: {
headers: {
@@ -1512,8 +1529,8 @@ export interface components {
};
};
};
- /** @description Field Operation Statistics broken down according to the legend for another context. */
- FieldOperationDataAnalysisStatistics: {
+ /** @description An Object of Field Operation Layers */
+ FieldOperationLayers: {
headers: {
[name: string]: unknown;
};
@@ -1526,12 +1543,12 @@ export interface components {
* @example 70
*/
total?: number;
- values?: components['schemas']['MapRangeWithLayerStatistics'][];
+ values?: components['schemas']['FieldOperationLayers'];
};
};
};
- /** @description An Object of Field Operation Layers */
- FieldOperationLayers: {
+ /** @description A collection of field operation machines */
+ FieldOperationMachines: {
headers: {
[name: string]: unknown;
};
@@ -1544,172 +1561,157 @@ export interface components {
* @example 70
*/
total?: number;
- values?: components['schemas']['FieldOperationLayers'];
+ values?: components['schemas']['FieldOperationMachine'][];
};
};
};
- /** @description An Object of Field Operation layer legend */
- FieldOperationLayerLegend: {
+ /** @description An object of Field Operation Measurements or image */
+ FieldOperationMeasurementOrImage: {
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'];
- };
- };
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationMeasurement'];
+ 'application/vnd.deere.axiom.v3.image+json': components['schemas']['FieldOperationPNGImage'];
+ 'application/vnd.deere.axiom.v3.location+tif+json': components['schemas']['FieldOperationGeoTIFFLocation'];
};
};
- /** @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;
+ /** @description A collection of Field Operation Measurements */
+ FieldOperationMeasurements: {
+ headers: {
[name: string]: unknown;
};
content: {
- 'image/png': string;
+ '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'][];
+ };
};
};
- /** @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 +1720,41 @@ 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 yield representation (unit) type. Accepted values are VOLUME or MASS. */
+ 'Accept-Yield-Preference': 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", "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 +1768,44 @@ 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 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 +1834,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..5e6a6d9 100644
--- a/src/types/generated/files.ts
+++ b/src/types/generated/files.ts
@@ -306,6 +306,20 @@ 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;
+ };
/**
* @example SETUP
* @enum {string}
@@ -325,69 +339,6 @@ export interface components {
| 'ISO_SETUP'
| 'BOUNDARY'
| 'EXCEL';
- 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;
- };
- 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;
- };
- 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;
- };
FilesGet: {
/**
* @description A new x-deere-signature response header will be included if the response has changed since last api call.
@@ -473,6 +424,79 @@ 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;
+ };
+ 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 +567,85 @@ 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 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 */
+ 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 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;
};
requestBodies: never;
headers: never;
diff --git a/src/types/generated/flags.ts b/src/types/generated/flags.ts
index 8e80b52..93d27a9 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,13 @@ 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.
- */
- get: operations['getFlagForOrganizationByFlagId'];
- /**
- * Update flag by id
- * @description This resource will update flag by Organization and Flag Id.
+ * List flags for the field
+ * @description This resource will return a list of flag objects associated with the field.
*/
- put: operations['updateFlagByIdOrgId'];
+ get: operations['getOrgFieldFlags'];
+ put?: never;
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: operations['deleteFlagByIdOrgId'];
+ delete?: never;
options?: never;
head?: never;
patch?: never;
@@ -56,7 +48,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/organizations/{orgId}/fields/{fieldId}/flags': {
+ '/organizations/{orgId}/flags/{flagId}': {
parameters: {
query?: never;
header?: never;
@@ -64,13 +56,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 +80,7 @@ export interface paths {
export type webhooks = Record;
export interface components {
schemas: {
+ ContentType: unknown;
LinkFlagId: {
/**
* @description Flag Category Preferences Link.
@@ -131,7 +132,6 @@ export interface components {
*/
field?: unknown;
};
- ContentType: unknown;
ValuesFlagId: {
/**
* @description Currently only three geometries types (Point, LineString and Polygon) are supported.
@@ -245,38 +245,38 @@ 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 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 Flags created before end time (in UTC) will be returned */
+ EndTime: string;
/** @description Fields guid of the field. */
FieldId: 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 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 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 +284,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 +299,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 +311,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,93 +337,85 @@ export interface operations {
};
};
};
- updateFlagByIdOrgId: {
+ getFlagsForOrganization: {
parameters: {
- query?: never;
- header?: never;
+ query?: {
+ /** @description Embed additional attributes if required to reduce the number of requests */
+ embed?: components['parameters']['Embed'];
+ /** @description Flags created after start time (in UTC) will be returned */
+ startTime?: components['parameters']['StartTime'];
+ /** @description Flags created before end time (in UTC) will be returned */
+ endTime?: components['parameters']['EndTime'];
+ /** @description Specify a comma-separated list of category GUIDs to retrieve */
+ categoryIDs?: components['parameters']['CategoryIds'];
+ /** @description Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used */
+ 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 */
+ simple?: components['parameters']['Simple'];
+ /** @description Does not populate geometry, overrides simple if both are true */
+ metadataOnly?: components['parameters']['MetadataOnly'];
+ };
+ header?: {
+ /** @description If embedding flag category, language that category name shall be returned within a flag, e.g., "de-DE" */
+ 'Accept-Language'?: components['parameters']['Accept-Language'];
+ };
path: {
- /** @description Organization Id */
- orgId: components['parameters']['OrgId2'];
- /** @description flagId to query for flag */
- flagId: components['parameters']['FlagId'];
+ /** @description Organization Id where the Flag belongs to */
+ orgId: components['parameters']['OrgId3'];
};
cookie?: never;
};
- requestBody?: {
- content: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['ValuesFlagIdPut'];
- };
- };
+ requestBody?: never;
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 */
+ 200: components['responses']['FlagsGet'];
+ /** @description Access forbidden. The user does not have permission to access the given organization, or the organization does not exist. */
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: {
+ createFlag: {
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 Organization Id where the Flag belongs to */
+ orgId: components['parameters']['OrgId3'];
};
cookie?: never;
};
- requestBody?: never;
+ /** @description The flag data to add. The new uuid will be assigned as ID of the newly created flag. */
+ requestBody?: {
+ content: {
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['ValuesFlagIdPut'];
+ };
+ };
responses: {
- /** @description No Content. Flag deleted successfully. */
- 200: {
+ 200: components['responses']['PostFlags'];
+ /** @description - Not all data specified */
+ 400: {
headers: {
[name: string]: unknown;
};
- content: {
- 'application/vnd.deere.axiom.v3+json': {
- /**
- * Format: int32
- * @example 1
- */
- total?: number;
- };
- };
+ content?: never;
};
- /** @description Forbidden. - The user has no permission to delete the flag. */
+ /** @description Access forbidden. The user has no access to the org or is not allowed to create flags in the org. */
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. - No contributon definition ID is found - Field link cannot be resolved (field not found) */
404: {
headers: {
[name: string]: unknown;
@@ -434,7 +424,7 @@ export interface operations {
};
};
};
- getFlagsForOrganization: {
+ getFlagForOrganizationByFlagId: {
parameters: {
query?: {
/** @description Embed additional attributes if required to reduce the number of requests */
@@ -463,56 +453,74 @@ export interface operations {
'Accept-Language'?: components['parameters']['Accept-Language'];
};
path: {
- /** @description Organization Id where the Flag belongs to */
- orgId: components['parameters']['OrgId3'];
+ /** @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']['FlagsGet'];
- /** @description Access forbidden. The user does not have permission to access the given organization, or the organization does not exist. */
+ 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 present for given orgId or no flag id present in the given org id */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
};
};
- createFlag: {
+ updateFlagByIdOrgId: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Organization Id where the Flag belongs to */
- orgId: components['parameters']['OrgId3'];
+ /** @description Organization Id */
+ orgId: components['parameters']['OrgId2'];
+ /** @description flagId to query for flag */
+ flagId: components['parameters']['FlagId'];
};
cookie?: never;
};
- /** @description The flag data to add. The new uuid will be assigned as ID of the newly created flag. */
requestBody?: {
content: {
'application/vnd.deere.axiom.v3+json': components['schemas']['ValuesFlagIdPut'];
};
};
responses: {
- 200: components['responses']['PostFlags'];
- /** @description - Not all data specified */
+ /** @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 Access forbidden. The user has no access to the org or is not allowed to create flags in the org. */
+ /** @description Forbidden Access */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
- /** @description Entity Not found. - No contributon definition ID is found - Field link cannot be resolved (field not found) */
+ /** @description Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org */
404: {
headers: {
[name: string]: unknown;
@@ -521,51 +529,43 @@ export interface operations {
};
};
};
- getOrgFieldFlags: {
+ deleteFlagByIdOrgId: {
parameters: {
- query?: {
- /** @description Embed additional attributes if required to reduce the number of requests */
- embed?: components['parameters']['Embed'];
- /** @description Flags created after start time (in UTC) will be returned */
- startTime?: components['parameters']['StartTime'];
- /** @description Flags created before end time (in UTC) will be returned */
- endTime?: components['parameters']['EndTime'];
- /** @description Specify a comma-separated list of category GUIDs to retrieve */
- categoryIDs?: components['parameters']['CategoryIds'];
- /** @description Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used */
- categoryNames?: components['parameters']['CategoryNames'];
- /** @description Request flags by archived status */
- recordFilter?: components['parameters']['RecordFilter'];
- /** @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 */
- simple?: components['parameters']['Simple'];
- /** @description Does not populate geometry, overrides simple if both are true */
- metadataOnly?: components['parameters']['MetadataOnly'];
- };
- header?: {
- /** @description If embedding flag category, language that category name shall be returned within a flag, e.g., "de-DE" */
- 'Accept-Language'?: components['parameters']['Accept-Language'];
- };
+ query?: never;
+ header?: never;
path: {
- /** @description Organization Id where the Flag belongs to */
- orgId: components['parameters']['OrgId3'];
- /** @description Fields guid of the field. */
- fieldId: components['parameters']['FieldId'];
+ /** @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: {
- 200: components['responses']['GetOrgId'];
- /** @description Forbidden. The user has no access to the given flag */
+ /** @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. No organization and/or field with these ids. */
+ /** @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/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/map-layers.ts b/src/types/generated/map-layers.ts
index 3125879..ba64a1b 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': {
+ '/mapLayerSummaries/{id}': {
parameters: {
query?: never;
header?: never;
@@ -12,80 +12,86 @@ export interface paths {
cookie?: never;
};
/**
- * List Map Layer Summaries
- * @description This resource will list all Map Layer Summaries for a specified field.
+ * View a Map Layer Summary
+ * @description Returns a specific Map Layer Summary resource.
*/
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 Map Layer Summary ID */
+ id: components['parameters']['id'];
};
cookie?: never;
};
requestBody?: never;
responses: {
- 200: components['schemas']['MapLayerSummaryCollection'];
+ /** @description View a specific Map Layer Summary */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ 'application/vnd.deere.axiom.v3+json': {
+ values?: unknown;
+ links?: unknown;
+ };
+ };
+ };
+ 401: components['responses']['401'];
+ 403: components['responses']['403'];
+ 404: components['responses']['404'];
+ 406: components['responses']['406'];
+ 429: components['responses']['429'];
};
};
put?: never;
+ post?: never;
/**
- * Create a map layer summary
- * @description Creates a new Map Layer Summary resource.
+ * Delete a Map Layer Summary
+ * @description Deletes a Map Layer Summary and its underlying Map Layer and File Resource resources.
*/
- post: {
+ delete: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Organization ID */
- orgId: components['parameters']['OrganizationId'];
- /** @description Field ID */
- fieldId: components['parameters']['fieldId'];
+ /** @description Map Layer Summary ID */
+ id: components['parameters']['id'];
};
cookie?: never;
};
- requestBody?: {
- content: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['PostRequest'];
- 'Create Map Layer Summary': unknown;
- };
- };
+ requestBody?: never;
responses: {
- /** @description Created */
+ /** @description Deleted */
200: {
headers: {
[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;
trace?: never;
};
- '/mapLayerSummaries/{id}': {
+ '/organizations/{orgId}/fields/{id}/mapLayerSummaries': {
parameters: {
query?: never;
header?: never;
@@ -93,80 +99,74 @@ export interface paths {
cookie?: never;
};
/**
- * View a Map Layer Summary
- * @description Returns a specific Map Layer Summary resource.
+ * List Map Layer Summaries
+ * @description This resource will list all Map Layer Summaries for a specified field.
*/
get: {
parameters: {
- query?: never;
+ 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 Map Layer Summary ID */
- id: components['parameters']['id'];
+ /** @description Organization ID */
+ orgId: components['parameters']['OrganizationId'];
+ /** @description Field ID */
+ fieldId: components['parameters']['fieldId'];
};
cookie?: never;
};
requestBody?: never;
responses: {
- /** @description View a specific Map Layer Summary */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- 'application/vnd.deere.axiom.v3+json': {
- values?: unknown;
- links?: unknown;
- };
- };
- };
- 401: components['responses']['401'];
- 403: components['responses']['403'];
- 404: components['responses']['404'];
- 406: components['responses']['406'];
- 429: components['responses']['429'];
+ 200: components['schemas']['MapLayerSummaryCollection'];
};
};
put?: never;
- post?: never;
/**
- * Delete a Map Layer Summary
- * @description Deletes a Map Layer Summary and its underlying Map Layer and File Resource resources.
+ * Create a map layer summary
+ * @description Creates a new Map Layer Summary resource.
*/
- delete: {
+ post: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Map Layer Summary ID */
- id: components['parameters']['id'];
+ /** @description Organization ID */
+ orgId: components['parameters']['OrganizationId'];
+ /** @description Field ID */
+ fieldId: components['parameters']['fieldId'];
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['PostRequest'];
+ 'Create Map Layer Summary': unknown;
+ };
+ };
responses: {
- /** @description Deleted */
+ /** @description Created */
200: {
headers: {
[name: string]: unknown;
};
content: {
- 'application/vnd.deere.axiom.v3+json': {
- /**
- * Format: int32
- * @example 1
- */
- total?: number;
- };
+ '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;
@@ -176,21 +176,57 @@ export interface paths {
export type webhooks = Record;
export interface components {
schemas: {
- /** @description Provides a reference to an associated object or list. */
- Link: {
- /** @example 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;
+ };
+ AvailableLinks: {
/**
- * @description The relation of the object to the linked resource.
- * @example owningOrganization
+ * @description This Map Layer List Link.
+ * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries
*/
- rel?: string;
+ 'self (map layer summaries list)'?: unknown;
/**
- * Format: uri
- * @description The URI to the related resource.
- * @example https://api.deere.com/platform/organizations/61265
+ * @description This Map Layer Summary Link.
+ * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID
*/
- uri?: string;
+ '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;
};
CollectionBase: {
links?: {
@@ -209,20 +245,222 @@ export interface components {
/** @example 1 */
total?: number;
};
- MapLayerSummaryCollection: unknown;
+ 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[];
+ links?: unknown[];
+ /**
+ * @description Count of Map Layer Summaries in response.
+ * @example 3
+ */
+ total?: number;
+ /** @description The primary resource listing. */
+ values?: unknown[];
+ };
+ 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'][];
+ };
+ 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;
+ };
+ 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;
+ };
+ /** @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'][];
+ };
+ 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;
+ };
+ PostAvailableLinks: {
+ /**
+ * @description Organizations Link
+ * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID
+ */
+ 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;
};
PostContributedMapLayerSummary: {
/**
@@ -269,38 +507,6 @@ 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;
- };
PostRequest: {
/**
* @description Links to other objects in the Deere ecosystem.
@@ -367,212 +573,6 @@ 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'];
- /**
- * @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'][];
- };
- /** @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;
- };
- 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;
- };
- 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'][];
- };
- '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;
- };
};
responses: {
/** @description The request body was missing a required field or supplied a read-only value. */
@@ -641,16 +641,16 @@ 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 Map Layer Summary ID */
id: string;
+ /** @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..df5a1fd 100644
--- a/src/types/generated/products.ts
+++ b/src/types/generated/products.ts
@@ -248,96 +248,73 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/varieties/{erid}/associateToOrg/{organizationId}': {
+ '/varieties': {
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.
+ * 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.
*/
- post: {
+ 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'];
- /** @description The identifier of the Organization. */
- organizationId: components['parameters']['OrganizationID'];
+ 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;
};
- /** @description The product to add. */
- requestBody?: {
- content: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductPointerRequest'];
- };
- };
+ requestBody?: never;
responses: {
- /** @description Successful association of reference variety to org. */
+ /** @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']['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'][];
- };
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVarietyCollection'];
};
};
- /** @description Invalid access to products for organization */
+ /** @description The user does not have access to manage products. */
403: {
headers: {
[name: string]: unknown;
};
content?: never;
};
- /** @description Organization does not exist. */
+ /** @description No variety found with this country code. */
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;
- };
};
};
+ put?: never;
+ post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
- '/varieties': {
+ '/varieties/{erid}': {
parameters: {
query?: never;
header?: never;
@@ -345,38 +322,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.
+ * Get a single reference variety.
+ * @description Single variety 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 single variety matching the specified erid. */
200: {
headers: {
[name: string]: unknown;
};
content: {
- 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVarietyCollection'];
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVariety'];
};
};
/** @description The user does not have access to manage products. */
@@ -386,7 +356,7 @@ export interface paths {
};
content?: never;
};
- /** @description No variety found with this country code. */
+ /** @description No variety found matching this erid. */
404: {
headers: {
[name: string]: unknown;
@@ -403,18 +373,20 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/varieties/{erid}': {
+ '/varieties/{erid}/associateToOrg/{organizationId}': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
+ get?: never;
+ put?: never;
/**
- * Get a single reference variety.
- * @description Single variety from industry data sources, such as CDMS.
+ * 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.
*/
- get: {
+ post: {
parameters: {
query?: never;
header?: never;
@@ -424,38 +396,66 @@ 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']['ReferenceProductPointerRequest'];
+ };
+ };
responses: {
- /** @description A single variety matching the specified erid. */
+ /** @description Successful association of reference variety to 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'][];
};
};
- /** @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 products for 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;
};
content?: never;
};
+ /** @description A product already exists in this org with the specified erid. */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
};
};
- put?: never;
- post?: never;
delete?: never;
options?: never;
head?: never;
@@ -600,6 +600,18 @@ export interface paths {
export type webhooks = Record;
export interface components {
schemas: {
+ 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;
@@ -610,6 +622,87 @@ export interface components {
*/
id?: 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;
+ };
+ CommonProductPointerRequest: {
+ overrides?: components['schemas']['OverrideKeyValuePair'][] | null;
+ };
Document: {
/** @example Document */
'@type': unknown;
@@ -647,87 +740,41 @@ export interface components {
DocumentCollection: components['schemas']['CollectionBase'] & {
values?: components['schemas']['Document'][];
};
- BaseResource: {
- /** @example BaseResource */
+ /** Format: Errors/DataValidationException */
+ Errors: {
+ /** @example Errors */
'@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'][];
- };
- ReferenceVariety: components['schemas']['BaseResource'] & {
- /** @example ReferenceVariety */
- '@type'?: unknown;
- /**
- * Format: uuid
- * @description Primary identifier for reference variety.
- * @example 1f8c12b4-126f-11ec-82a8-0242ac130003
- */
- id?: string;
- /**
- * Format: uuid
- * @description product id of the reference variety
- * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914
- */
- referenceId?: string;
- /**
- * @example VARIETY
- * @enum {string}
- */
- category?: 'VARIETY';
- /**
- * @description The common name of the reference variety.
- * @example S73-Z5 - 50lb bag
- */
- name?: string;
- /**
- * Format: uuid
- * @description Optional. Denotes whether this product is from the global reference list.
- * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914
- */
- referenceGuid?: string;
- /**
- * @description The name of the input manufacturer.
- * @example NK
- */
- companyName?: string;
- /**
- * @description The identifier of the crop type that this reference variety is associated with (see the Crop Types API).
- * @example SOYBEANS
- */
- cropName?: string;
- /**
- * @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.
- * @example USA
- */
- countryCode?: string;
- /**
- * Format: integer
- * @description The source system for the reference variety.
- * @example 3
- */
- sourceSystem?: string;
- /**
- * @description The source system identifier for the reference variety.
- * @example 905P24925
- */
- sourceSystemProductId?: string;
- /**
- * 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;
+ 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;
};
Link: {
/**
@@ -747,18 +794,6 @@ export interface components {
*/
uri?: string;
};
- CollectionBase: {
- /** @description Provides a reference to an associated object or list. */
- links?: components['schemas']['Link'][];
- /**
- * Format: int32
- * @example 100
- */
- total?: number;
- };
- ReferenceVarietyCollection: components['schemas']['CollectionBase'] & {
- values?: components['schemas']['ReferenceVariety'][];
- };
OverrideKeyValuePair: {
/**
* @description Key for override parameter when setting overrides for a reference product
@@ -772,32 +807,46 @@ export interface components {
*/
value: Record;
};
- CommonProductPointerRequest: {
- overrides?: components['schemas']['OverrideKeyValuePair'][] | null;
- };
- ReferenceProductPointerRequest: {
+ PostVariety: {
+ /** @example Variety */
+ '@type'?: unknown;
/**
- * @description Country of the product to which it belongs.
- * @example USA
+ * @description The common name of the variety.
+ * @example S73-Z5 - 50lb bag
*/
- countryCode?: string;
- } & components['schemas']['CommonProductPointerRequest'];
- VarietyCollection: components['schemas']['CollectionBase'] & {
- values?: components['schemas']['Variety'][];
- };
- ReferenceProductOverrideStatus: {
+ name: string;
/**
- * @description Key for override parameter when setting overrides for a reference product
- * @example archived
+ * @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}
*/
- key?: 'archived';
+ category?: 'VARIETY';
/**
- * @description Whether or not the override was successfully applied
- * @example true
+ * @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
*/
- success?: boolean;
- errors?: components['schemas']['Errors'];
+ 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;
};
PutVariety: {
/** @example Variety */
@@ -840,96 +889,99 @@ export interface components {
*/
modifiedTime?: string;
};
- VarietyIdUpdate: {
- /**
- * @description The common name of the variety.
- * @example RL8288HB
- */
- name?: string;
+ ReferenceProductOverrideStatus: {
/**
- * @description The name of the input manufacturer.
- * @example AgVenture
+ * @description Key for override parameter when setting overrides for a reference product
+ * @example archived
+ * @enum {string}
*/
- companyName?: string;
+ key?: 'archived';
/**
- * @description The identifier of the crop type that this variety is associated with.
- * @example CORN_WET
+ * @description Whether or not the override was successfully applied
+ * @example true
*/
- cropName?: string;
+ success?: boolean;
+ errors?: components['schemas']['Errors'];
+ };
+ ReferenceProductPointerRequest: {
/**
- * @description Whether or not this product is actively used. Defaults to false.
- * @example false
+ * @description Country of the product to which it belongs.
+ * @example USA
*/
- archived?: boolean;
- };
- ChildVariety: components['schemas']['BaseResource'] & {
- /** @example Variety */
+ countryCode?: string;
+ } & components['schemas']['CommonProductPointerRequest'];
+ ReferenceVariety: components['schemas']['BaseResource'] & {
+ /** @example ReferenceVariety */
'@type'?: unknown;
/**
* Format: uuid
- * @description The primary identifier for the variety that is unique to your organization.
- * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914
+ * @description Primary identifier for reference variety.
+ * @example 1f8c12b4-126f-11ec-82a8-0242ac130003
*/
id?: string;
/**
- * @description The common name of the variety.
- * @example S73-Z5 - 50lb bag
+ * Format: uuid
+ * @description product id of the reference variety
+ * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914
*/
- name?: string;
+ referenceId?: 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
+ * @description The common name of the reference variety.
+ * @example S73-Z5 - 50lb bag
*/
- companyName?: string;
+ name?: 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
+ * Format: uuid
+ * @description Optional. Denotes whether this product is from the global reference list.
+ * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914
*/
- archived?: boolean;
+ referenceGuid?: string;
/**
- * Format: date-time
- * @description product created time
- * @example 2017-03-21T21:12:53.865Z
+ * @description The name of the input manufacturer.
+ * @example NK
*/
- createdTime?: string;
+ companyName?: string;
/**
- * Format: date-time
- * @description product modified time
- * @example 2018-04-06T15:12:52.910Z
+ * @description The identifier of the crop type that this reference variety is associated with (see the Crop Types API).
+ * @example SOYBEANS
*/
- readonly modifiedTime?: string;
+ cropName?: string;
/**
- * @description Country of the product to which it belongs
+ * @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.
* @example USA
*/
countryCode?: string;
/**
- * @description Parent id of the child in which the product is merged
- * @example b0241592-c95a-4a8b-a2f9-3e58168ac291
+ * Format: integer
+ * @description The source system for the reference variety.
+ * @example 3
*/
- parentErid?: string;
+ sourceSystem?: string;
/**
- * @description Showing the status of cleanup.
- * @example MERGED
+ * @description The source system identifier for the reference variety.
+ * @example 905P24925
*/
- cleanupStatus?: string;
+ sourceSystemProductId?: string;
/**
- * @description Clean up action time
- * @example 2025-09-22T11:24:43.855Z
+ * Format: date-time
+ * @description product created time
+ * @example 2019-03-27T14:59:57.000Z
*/
- cleanupActionDate?: string;
- /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. */
- documentsList?: components['schemas']['Document'][];
+ createdTime?: string;
+ /**
+ * Format: date-time
+ * @description product modified time
+ * @example 2019-03-27T14:59:57.000Z
+ */
+ modifiedTime?: string;
+ };
+ ReferenceVarietyCollection: components['schemas']['CollectionBase'] & {
+ values?: components['schemas']['ReferenceVariety'][];
};
Variety: components['schemas']['BaseResource'] & {
/** @example Variety */
@@ -1014,92 +1066,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,15 +1113,10 @@ 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;
};
};
responses: {
@@ -1129,31 +1129,31 @@ export interface components {
};
};
parameters: {
- /** @description An embeddable list of properties which are optional by default. */
- VarietyEmbed: 'documents' | 'showMergedProducts';
/** @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 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 The organization owning the varieties. */
+ OrgId: number;
+ /** @description The identifier of the Organization. */
+ OrganizationID: number;
+ /** @description Filter results based on status */
+ RecordFilter: string;
+ /** @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;
};
requestBodies: never;
headers: never;
diff --git a/src/types/generated/webhook.ts b/src/types/generated/webhook.ts
index ad05fc3..f6f9574 100644
--- a/src/types/generated/webhook.ts
+++ b/src/types/generated/webhook.ts
@@ -56,46 +56,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 +121,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 +168,71 @@ export interface components {
*/
invalidValue?: string;
};
+ Errors: components['schemas']['Error'][];
+ /**
+ * @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;
+ };
/** @description A subscription request */
SubscriptionRequestContent: {
eventTypeId: components['schemas']['EventTypeId'];
@@ -201,130 +251,66 @@ 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 The link of the request.
- * @example https://sandboxapi.deere.com/platform/eventSubscriptions
- */
- self?: unknown;
- };
/** @description A subscription response */
- SubscriptionResponseContentPut: {
+ SubscriptionResponseContent: {
/**
* @description The postback endpoint that receives the event(s).
- * @example See the sample response below
+ * @example See the sample request below Editable: Yes
*/
targetEndpoint?: Record;
/**
* @description The status of the event subscription.
- * @example Active
+ * @example active Editable: Yes
*/
status?: string;
/**
* @description Human-readable name to easily identify the event subscription.
- * @example My Data Subscription
+ * @example My Data Subscription Editable: Yes
*/
displayName?: string;
- /**
- * @description The client key used to create the subscription.
- * @example REDACTED
- */
- clientKey?: string;
/**
* @description A string that was sent with each delivery to validate the sender.
- * @example Follows pattern '^[A-Za-z0-9+/=]{0,256}$'
+ * @example Follows pattern '^[A-Za-z0-9+/=]{0,256}$' Editable: Yes
*/
token?: string;
};
/** @description A subscription response */
- SubscriptionResponseContent: {
+ SubscriptionResponseContentPut: {
/**
* @description The postback endpoint that receives the event(s).
- * @example See the sample request below Editable: Yes
+ * @example See the sample response below
*/
targetEndpoint?: Record;
/**
* @description The status of the event subscription.
- * @example active Editable: Yes
+ * @example Active
*/
status?: string;
/**
* @description Human-readable name to easily identify the event subscription.
- * @example My Data Subscription Editable: Yes
+ * @example My Data Subscription
*/
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 HTTPS subscription */
- HttpsSubscription: {
- /** @example https */
- targetType: string;
- /** @example https//example.com/callme */
- uri: string;
- };
- /**
- * @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'];
- /**
- * Format: int32
- * @example 5
+ * @description The client key used to create the subscription.
+ * @example REDACTED
*/
- concurrentDeliveries?: number;
+ clientKey?: string;
/**
- * Format: int32
- * @example 5
+ * @description A string that was sent with each delivery to validate the sender.
+ * @example Follows pattern '^[A-Za-z0-9+/=]{0,256}$'
*/
- maxBatchSize?: number;
- links?: components['schemas']['Links'];
+ token?: string;
};
- /** @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: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- 'application/vnd.deere.axiom.v3+json': {
- links?: unknown;
- values?: unknown;
- };
- };
- };
- /** @description Subscriptions */
- SubscriptionCollectionResponse: {
+ /** @description Bad Request */
+ BadRequestResponse: {
headers: {
[name: string]: unknown;
};
content: {
- 'application/vnd.deere.axiom.v3+json': {
- links?: unknown;
- };
+ 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors'];
};
};
/** @description Created */
@@ -348,21 +334,12 @@ export interface components {
'application/vnd.deere.axiom.v3+json': unknown;
};
};
- /** @description Subscription */
- UpdatedResponse: {
+ /** @description Does not have access */
+ DoesNotHaveAccessResponse: {
headers: {
[name: string]: unknown;
};
- content: {
- 'application/vnd.deere.axiom.v3+json': {
- /**
- * Format: int64
- * @description Number of results in the list
- * @example 70
- */
- total?: number;
- };
- };
+ content?: never;
};
/** @description Not found */
InputValueIsInvalidResponse: {
@@ -371,60 +348,83 @@ 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;
+ };
};
};
};
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;
};
};
};
From 92cc584820357bba514a8c6132f101a3f01f827e Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 04:04:15 -0500
Subject: [PATCH 13/18] ci(sync): classify API changes and gate releases
accordingly
The sync now runs the full pipeline (redact-specs and
generate-api-servers were missing), reads sync-report.json after
generation, and acts on the classification: additive changes release a
minor version with the new operations listed in the changelog, benign
churn keeps patch semantics, and breaking runs fail at the Generate SDK
step with manifest remediation guidance in the job summary.
---
.github/workflows/sync-api.yml | 90 +++++++++++++++++++++++++++++++---
1 file changed, 84 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/sync-api.yml b/.github/workflows/sync-api.yml
index 2a864c9..d776e95 100644
--- a/.github/workflows/sync-api.yml
+++ b/.github/workflows/sync-api.yml
@@ -50,15 +50,39 @@ 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)
+ 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
+
+ {
+ echo "added_ops<> $GITHUB_OUTPUT
+
- name: Lint fix generated code
run: pnpm lint:fix
@@ -75,10 +99,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
@@ -100,9 +125,17 @@ 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.
+ if [[ "${{ steps.classify.outputs.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 +148,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 }}
run: |
DATE=$(date +%Y-%m-%d)
VERSION="${{ steps.version.outputs.new_version }}"
+ CLASSIFICATION="${{ steps.classify.outputs.classification }}"
+
+ # 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 +250,23 @@ jobs:
# modes are eliminated by letting the tag trigger drive the release.
- name: Summary
+ env:
+ ADDED_OPS: ${{ steps.classify.outputs.added_ops }}
run: |
+ CLASSIFICATION="${{ steps.classify.outputs.classification }}"
+
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 +279,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 + "`: " + .method + " " + .path + " (as `" + .name + "`)"' 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
From 9c7c119892fe4527fb8a5496f3324a589534a38d Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 04:55:31 -0500
Subject: [PATCH 14/18] fix(codegen): reconcile platform-family server variants
across merged docs
Live portal data showed JD's secondary documents carry servers blocks
that differ only as environment instances or documentation defects of
the one platform family (api vs partnerapi hosts, missing /platform
segments, placeholder hosts, omitted variables). Declaring documents
that all belong to the platform family now resolve to the primary's
block, which fix-specs normalizes to the templated form downstream,
matching what the SDK already ships for these specs. Placeholder-only
blocks are treated as non-declaring with a logged warning. Genuinely
different server families still refuse to merge.
---
scripts/fetch-specs.ts | 5 +-
scripts/lib/spec-merge.ts | 137 +++++++++++++++++++++++++++++++++++---
tests/spec-merge.test.ts | 132 +++++++++++++++++++++++++++++++++++-
3 files changed, 261 insertions(+), 13 deletions(-)
diff --git a/scripts/fetch-specs.ts b/scripts/fetch-specs.ts
index 75479df..6d8909d 100644
--- a/scripts/fetch-specs.ts
+++ b/scripts/fetch-specs.ts
@@ -174,7 +174,10 @@ async function main() {
continue;
}
- const merged = parsedDocs.length > 1 ? mergeSpecDocs(slug, parsedDocs) : parsedDocs[0].doc;
+ const merged =
+ parsedDocs.length > 1
+ ? mergeSpecDocs(slug, parsedDocs, { onWarning: (message) => console.log(message) })
+ : parsedDocs[0].doc;
const canonical = canonicalizeSpec(merged);
// Raw files are now re-serialized canonical YAML rather than
diff --git a/scripts/lib/spec-merge.ts b/scripts/lib/spec-merge.ts
index c06faaa..e9981c6 100644
--- a/scripts/lib/spec-merge.ts
+++ b/scripts/lib/spec-merge.ts
@@ -57,6 +57,14 @@ export interface MergeOptions {
* 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;
}
// ---------------------------------------------------------------------------
@@ -418,29 +426,136 @@ function foldTopLevelExtras(merged: Record, entry: OrderedDoc):
}
}
+// ---------------------------------------------------------------------------
+// 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[]
+ docs: readonly OrderedDoc[],
+ onWarning?: (message: string) => void
): void {
- const declared = docs
+ 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];
- for (const other of declared.slice(1)) {
- if (!deepEqualUnordered(other.servers, reference.servers)) {
- throw new Error(
- `mergeSpecDocs: slug "${slug}": documents "${reference.endPointName}" and ` +
- `"${other.endPointName}" declare different servers blocks. All declaring ` +
- `documents must agree; a human must reconcile them.`
- );
- }
+ 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;
}
@@ -525,7 +640,7 @@ export function mergeSpecDocs(
foldTopLevelExtras(merged, entry);
}
- applyServers(slug, merged, ordered);
+ applyServers(slug, merged, ordered, options.onWarning);
applyTags(merged, ordered);
merged['x-source-documents'] = ordered.map((entry) => ({
diff --git a/tests/spec-merge.test.ts b/tests/spec-merge.test.ts
index 76d2845..31cf1ac 100644
--- a/tests/spec-merge.test.ts
+++ b/tests/spec-merge.test.ts
@@ -442,7 +442,137 @@ describe('mergeSpecDocs: servers', () => {
assert.deepStrictEqual(merged.servers, [{ url: 'https://api.deere.com/platform' }]);
});
- it('throws when two docs declare conflicting servers, naming both endpoints', () => {
+ 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: {},
From 737fa7c12f3433f8effec4ed3174fb6397ea9dd0 Mon Sep 17 00:00:00 2001
From: ProductOfAmerica <14712114+ProductOfAmerica@users.noreply.github.com>
Date: Thu, 2 Jul 2026 05:28:17 -0500
Subject: [PATCH 15/18] feat(api): expose all portal spec documents (15
previously dropped)
First live fetch through the multi-document pipeline. The 7 multi-doc
slugs now merge every portal document: 15 secondary documents the old
fetch silently dropped are merged in, adding 56 operations JD published
under those documents (field-operations measurementTypes; the products
input families chemicals, fertilizers, dry-blends, tank-mixes,
active-ingredients, companies, documents; flags categories and category
preferences; map-layers and file-resources; file transfers; webhook
delivery; machine-location breadcrumbs). New operations enter
scripts/api-surface.yaml with deterministic proposed names; the run
classifies additive with zero missing operations.
Every previously published method keeps its exact name and binding,
verified by a before/after extraction of all 146 generated
(class, method, operation) triples: 146 preserved, 0 changed, 56 added.
src/api-servers.generated.ts and src/deere.ts are unchanged, so the
platform-family servers reconciliation routes nothing differently.
equipment.yaml carries an unrelated upstream JD edit (two response
schemas changed from a typed array-item ref to a bare array) that
weakens two EquipmentApi return types to unknown; no binding changes and
the full suite (lint, typecheck, build, 432 tests, 12 fuzz) passes.
---
scripts/api-surface.yaml | 112 +
specs/fixed/equipment.yaml | 6 +-
specs/fixed/field-operations-api.yaml | 333 +-
specs/fixed/files.yaml | 449 ++
specs/fixed/flags.yaml | 658 ++
specs/fixed/machine-locations.yaml | 329 +
specs/fixed/map-layers.yaml | 762 ++
specs/fixed/products.yaml | 7129 ++++++++++++++++--
specs/fixed/webhook.yaml | 145 +
specs/raw/equipment.yaml | 6 +-
specs/raw/field-operations-api.yaml | 339 +-
specs/raw/files.yaml | 449 ++
specs/raw/flags.yaml | 682 ++
specs/raw/machine-locations.yaml | 352 +
specs/raw/map-layers.yaml | 823 +++
specs/raw/products.yaml | 7230 +++++++++++++++++--
specs/raw/summary.json | 278 +-
specs/raw/webhook.yaml | 183 +
src/api/equipment.ts | 12 +-
src/api/field-operations-api.ts | 75 +
src/api/files.ts | 94 +
src/api/flags.ts | 149 +
src/api/machine-locations.ts | 27 +
src/api/map-layers.ts | 130 +
src/api/products.ts | 609 ++
src/api/webhook.ts | 28 +
src/hateoas-map.ts | 65 +
src/types/generated/equipment.ts | 4 +-
src/types/generated/field-operations-api.ts | 261 +-
src/types/generated/files.ts | 322 +
src/types/generated/flags.ts | 702 ++
src/types/generated/machine-locations.ts | 248 +-
src/types/generated/map-layers.ts | 664 ++
src/types/generated/products.ts | 5797 +++++++++++++--
src/types/generated/webhook.ts | 162 +
35 files changed, 27937 insertions(+), 1677 deletions(-)
diff --git a/scripts/api-surface.yaml b/scripts/api-surface.yaml
index 6ddcfef..69abaaa 100644
--- a/scripts/api-surface.yaml
+++ b/scripts/api-surface.yaml
@@ -151,6 +151,10 @@ specs:
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
@@ -171,27 +175,51 @@ specs:
- 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:
@@ -221,17 +249,39 @@ specs:
- 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
@@ -277,6 +327,40 @@ specs:
- 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}
@@ -287,22 +371,50 @@ specs:
name: getVarieties
- op: GET /varieties/{erid}/documents
name: listDocuments
+ - op: PATCH /chemicals/{erid}/setOverridesForOrg/{organizationId}
+ name: patchSetOverridesForOrg
+ - op: PATCH /fertilizers/{erid}/setOverridesForOrg/{organizationId}
+ name: patchFertilizersSetOverridesForOrg
- op: PATCH /varieties/{erid}/setOverridesForOrg/{organizationId}
name: patch
+ - op: POST /chemicals/{erid}/associateToOrg/{organizationId}
+ name: createAssociateToOrg
+ - 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}
diff --git a/specs/fixed/equipment.yaml b/specs/fixed/equipment.yaml
index 62c8031..5b52475 100644
--- a/specs/fixed/equipment.yaml
+++ b/specs/fixed/equipment.yaml
@@ -859,8 +859,7 @@ components:
type: "object"
properties:
values:
- items:
- $ref: "#/components/schemas/equipmentForList"
+ type: "array"
examples:
No Header:
value:
@@ -1008,8 +1007,7 @@ components:
type: "object"
properties:
values:
- items:
- $ref: "#/components/schemas/equipment"
+ type: "array"
examples:
No Header:
value:
diff --git a/specs/fixed/field-operations-api.yaml b/specs/fixed/field-operations-api.yaml
index 2b4b3e3..ec3cf33 100644
--- a/specs/fixed/field-operations-api.yaml
+++ b/specs/fixed/field-operations-api.yaml
@@ -35,6 +35,36 @@ paths:
$ref: "#/components/responses/DoesNotHaveAccessToFieldOperations"
"404":
$ref: "#/components/responses/InputFieldOperationValueIsInvalid"
+ /fieldOperations/{operationId}/measurementTypes:
+ get:
+ 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/MeasurementType_MeasurementType"
+ security:
+ - OAuth2:
+ - "ag2"
+ responses:
+ "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 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"
@@ -93,6 +123,13 @@ components:
schema:
type: "string"
example: "METRIC"
+ Accept-UOM-System_MeasurementType:
+ name: "Accept-UOM-System"
+ in: "header"
+ description: "Desired unit system. Takes ENGLISH or METRIC."
+ schema:
+ type: "string"
+ example: "ENGLISH"
Accept-Yield-Preference:
name: "Accept-Yield-Preference"
in: "header"
@@ -101,6 +138,13 @@ components:
schema:
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"
+ example: "MASS"
CompareType:
in: "path"
x-required-boolean: true
@@ -181,7 +225,7 @@ components:
FieldOperationType:
in: "query"
name: "fieldOperationType"
- description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"."
+ description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"CARTING\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"."
schema:
$ref: "#/components/schemas/FieldOperationTypesEnum"
FieldOperationTypes:
@@ -219,6 +263,14 @@ components:
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"
@@ -857,6 +909,17 @@ components:
type: "array"
items:
$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:
@@ -869,6 +932,119 @@ components:
application/vnd.deere.axiom.v3.location+tif+json:
schema:
$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:
+ summary: "Field Operation Measurement"
+ description: "Field Operations"
+ 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/FieldOperationMeasurementType"
+ 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:
+ 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:
+ - "@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:
+ 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:
@@ -889,6 +1065,68 @@ components:
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:
+ No Header:
+ description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json"
+ value:
+ 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:
@@ -1838,6 +2076,30 @@ components:
- "TemperatureDifference"
- "RelativeHumidity"
- "SoilTemperature"
+ FieldOperationMeasurementType:
+ properties:
+ 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 unitId."
+ 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."
+ unitId:
+ type: "string"
+ example: "cm"
+ description: "Unit of measurement."
FieldOperationMeasurementTypesEnum:
allOf:
- type: "string"
@@ -1902,6 +2164,56 @@ components:
- "TillageSpeedResult"
- "TillageDepthTarget"
- "TillagePressureTarget"
+ FieldOperationMeasurement_MeasurementType:
+ properties:
+ 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"
+ 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:
@@ -2089,6 +2401,20 @@ components:
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"
@@ -2539,3 +2865,8 @@ components:
clientCredentials:
scopes:
ag2: "ag2"
+x-source-documents:
+ - endPointName: "field-operation"
+ id: 27
+ - endPointName: "measurement-type"
+ id: 28
diff --git a/specs/fixed/files.yaml b/specs/fixed/files.yaml
index 34bb2ca..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"
@@ -263,6 +532,15 @@ components:
default: "ALL"
format: "int64"
example: "MACHINE"
+ Id:
+ name: "id"
+ in: "path"
+ description: "File Transfer ID"
+ x-required-boolean: true
+ schema:
+ 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."
@@ -287,6 +565,23 @@ 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"
@@ -322,6 +617,21 @@ components:
type: "integer"
default: "N/A"
example: -1
+ 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: "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"
@@ -364,6 +674,13 @@ components:
schema:
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"
@@ -484,6 +801,88 @@ components:
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:
+ 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:
+ 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:
@@ -502,6 +901,38 @@ components:
- "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 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:
@@ -582,6 +1013,13 @@ components:
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":
@@ -700,3 +1138,14 @@ components:
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 83bbc0e..fa18a7b 100644
--- a/specs/fixed/flags.yaml
+++ b/specs/fixed/flags.yaml
@@ -49,6 +49,402 @@ paths:
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:
+ - "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":
+ 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."
+ x-required-boolean: true
+ content:
+ application/vnd.deere.axiom.v3+json:
+ schema:
+ $ref: "#/components/schemas/PutResponse"
+ examples:
+ No Header:
+ value:
+ "@type": "FlagCategory"
+ categoryTitle: "Rocks"
+ preferred: true
+ archived: 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:
+ 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: "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: "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: "deleteFlagCategoryByIdOrgId"
+ summary: "Delete a flag category"
+ tags:
+ - "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"
+ responses:
+ "200":
+ description: "No Content. Flag Category 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. - 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 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"
@@ -248,6 +644,42 @@ components:
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"
@@ -272,6 +704,15 @@ components:
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"
@@ -290,6 +731,24 @@ 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"
@@ -333,6 +792,15 @@ components:
type: "string"
default: "N/A"
example: 123456
+ OrgId2_FlagCategories:
+ name: "orgId"
+ in: "path"
+ x-required-boolean: true
+ description: "Organization Id."
+ schema:
+ type: "string"
+ default: "N/A"
+ example: 123456
OrgId3:
name: "orgId"
in: "path"
@@ -342,6 +810,60 @@ components:
type: "string"
default: "N/A"
example: 123456
+ OrgId3_FlagCategories:
+ name: "orgId"
+ in: "path"
+ x-required-boolean: true
+ description: "OrgId to query for Category"
+ schema:
+ type: "string"
+ 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: 123456
+ OrgId_FlagCategories:
+ name: "orgId"
+ in: "path"
+ x-required-boolean: true
+ description: "OrgId to query for Org."
+ schema:
+ type: "string"
+ default: "N/A"
+ example: 123456
+ OrgId_FlagCategoriesPreferences:
+ name: "orgId"
+ in: "path"
+ description: "orgId to query for preferences."
+ x-required-boolean: true
+ schema:
+ type: "string"
+ 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: 123456
+ PrefKey:
+ name: "prefKey"
+ in: "query"
+ description: "CategoryId to query for preferences"
+ x-required-boolean: false
+ schema:
+ type: "string"
+ example: "default"
+ default: "default"
RecordFilter:
name: "recordFilter"
in: "query"
@@ -505,6 +1027,115 @@ components:
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:
@@ -540,6 +1171,26 @@ components:
field:
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:
+ 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 +1252,10 @@ components:
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/machine-locations.yaml b/specs/fixed/machine-locations.yaml
index c0dfc0b..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:
@@ -126,11 +238,223 @@ paths:
content: {}
components:
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 +493,8 @@ components:
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 feb9441..8bac35f 100644
--- a/specs/fixed/map-layers.yaml
+++ b/specs/fixed/map-layers.yaml
@@ -15,6 +15,62 @@ servers:
- "sandboxapi"
- "partnerapi"
paths:
+ /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"
+ 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"
+ 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."
@@ -103,6 +159,239 @@ 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."
@@ -219,6 +508,36 @@ components:
format: "int64"
example: "d01111d6-1fa4-4659-943a-3df4a6b7933c"
default: "N/A"
+ fileId_FileResources:
+ in: "path"
+ name: "id"
+ description: "File Resource ID"
+ x-required-boolean: true
+ schema:
+ type: "string"
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd"
+ format: "uuid"
+ default: "N/A"
+ getId:
+ in: "path"
+ name: "id"
+ description: "Map Layer ID"
+ x-required-boolean: true
+ schema:
+ type: "string"
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd"
+ format: "uuid"
+ default: "N/A"
+ getMapId:
+ in: "path"
+ name: "id"
+ description: "Map Layer ID"
+ x-required-boolean: true
+ schema:
+ type: "string"
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd"
+ format: "uuid"
+ default: "N/A"
id:
name: "id"
in: "path"
@@ -229,6 +548,35 @@ components:
example: "y02111d6-1fa4-4659-943a-3df4a6b7933c"
format: "uuid"
default: "N/A"
+ 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"
@@ -316,6 +664,40 @@ components:
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:
@@ -395,6 +777,42 @@ components:
values:
type: "array"
description: "The primary resource listing."
+ ContributedMapLayer_FileResources:
+ 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: "File Resource ID"
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes"
+ metadata:
+ type: "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/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: "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"
@@ -433,6 +851,40 @@ components:
type: "array"
items:
$ref: "#/components/schemas/Link"
+ FileResourceAvailableLinks:
+ properties:
+ 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: "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/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: "2019-03-02T16:14:23.421Z Readonly: No"
GenericErrors:
properties:
"@type":
@@ -454,6 +906,92 @@ components:
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."
+ 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:
@@ -471,6 +1009,45 @@ components:
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: "string"
+ format: "uuid"
+ 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 ."
+ 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:
+ 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"
+ 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: "Object"
+ status:
+ example: "VALID"
+ description: "Map Layer image processing progress."
+ type: "object"
Link:
type: "object"
properties:
@@ -524,6 +1101,90 @@ components:
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:
@@ -628,6 +1289,11 @@ components:
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:
@@ -665,6 +1331,17 @@ components:
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:
+ 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:
@@ -721,6 +1398,70 @@ components:
description: "ISO 8601 Date and time in UTC this resource was created."
type: "string"
format: "date-time"
+ PostResponse_MapLayers:
+ properties:
+ id:
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes"
+ description: "Map Layer ID"
+ type: "string"
+ 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"
+ 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:
+ 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"
+ description: "File Resource ID"
+ example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes"
+ x-required-boolean: true
+ metadata:
+ type: "array"
+ 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"
@@ -729,3 +1470,24 @@ components:
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/products.yaml b/specs/fixed/products.yaml
index 48daee0..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,340 +25,501 @@ 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"
+ - "@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 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"
+ 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"
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/CommonReferenceChemical"
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"
+ overrides:
+ - key: "archived"
+ value: true
+ - key: "registration"
+ value: "EXEMPT"
+ - key: "isCarrier"
+ value: true
responses:
- "204":
- description: "The update was completed successfully"
+ "200":
+ 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_Chemicals"
examples:
Headers:
- description: "204 No Content The update was completed successfully."
+ description: "200 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/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"
+ /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/Errors"
+ $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 sufficient privileges to update varieties in this org"
+ description: "The user does not have access to manage products."
"404":
- description: "There is no variety matching the specified Erid"
- /varieties:
+ 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."
+ 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"
@@ -365,87 +527,99 @@ 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}/associateToOrg/{organizationId}:
+ description: "No fertilizer found matching this erid."
+ /fertilizers/{erid}/associateToOrg/{organizationId}:
post:
tags:
- - "Reference Varieties"
- summary: "Adds a single reference variety to organization"
+ - "Reference Fertilizers"
+ summary: "Adds a single reference fertilizer 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."
+ 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"
@@ -454,7 +628,7 @@ paths:
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: "#/components/schemas/ReferenceProductPointerRequest"
+ $ref: "#/components/schemas/PostReferenceFertilizer"
examples:
No Header:
value:
@@ -462,22 +636,30 @@ paths:
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 association of reference fertilizer to org."
content:
application/vnd.deere.axiom.v3+json:
schema:
- type: "array"
- items:
- $ref: "#/components/schemas/ReferenceProductOverrideStatus"
+ $ref: "#/components/responses/Created"
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:
@@ -495,27 +677,25 @@ paths:
"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:
+ 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,29 +741,39 @@ 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: []
+ - key: "isCarrier"
+ success: true
+ errors: []
+ - key: "registration"
+ success: true
+ errors: []
"400":
description: "Unresolvable name conflict or other error occurred."
content:
@@ -596,51 +792,2684 @@ paths:
description: "Invalid access to reference product associated to organization"
"404":
description: "Organization does not exist"
-components:
- parameters:
- 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"
- 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"
- OrgId:
- name: "orgId"
- in: "path"
- description: "The organization owning the varieties."
- x-required-boolean: true
- schema:
+ /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"
@@ -657,6 +3486,16 @@ components:
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"
@@ -665,279 +3504,2502 @@ components:
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"
- responses:
- Created:
- description: "Created"
- schemas:
- BaseResource:
+ 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:
- "@type":
+ rel:
type: "string"
- example: "BaseResource"
- id:
- description: "Primary identifier for resource."
+ 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: "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:
+ 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: "BaseResource"
- id:
- description: "Primary identifier for resource."
+ example: "MeasurementAsDouble"
+ valueAsDouble:
+ type: "number"
+ format: "double"
+ example: 3.14
+ unit:
type: "string"
- format: "uuid"
- example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
- ChildVariety:
+ 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:
- - $ref: "#/components/schemas/BaseResource"
- properties:
"@type":
- example: "Variety"
- id:
+ example: "Chemical"
+ name:
type: "string"
- example: "87b4a1e7-210b-482c-8a7a-19e9f644e914"
- format: "uuid"
+ 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
- description: "The primary identifier for the variety that is unique to your organization."
- name:
+ type:
type: "string"
- example: "S73-Z5 - 50lb bag"
- description: "The common name of the variety."
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:
- - "VARIETY"
- example: "VARIETY"
+ - "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)."
- nullable: false
+ 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 variety from display in your organization."
+ 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
- nullable: 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 created time"
+ description: "product creation time"
modifiedTime:
type: "string"
format: "date-time"
example: "2018-04-06T15:12:52.910Z"
- description: "product modified time"
+ description: "product modification 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:
+ weightUnit:
type: "string"
- example: "2025-09-22T11:24:43.855Z"
- description: "Clean up action time"
- documentsList:
+ 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/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
- CommonProductPointerRequest:
- type: "object"
- properties:
- overrides:
- nullable: true
- type: "array"
- items:
- $ref: "#/components/schemas/OverrideKeyValuePair"
- Document:
+ $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: "Document"
+ example: "Fertilizer"
+ name:
+ type: "string"
+ example: "Manure"
+ description: "The common name of the fertilizer."
x-required-boolean: true
- erid:
+ registration:
type: "string"
- description: "Unique id of the document"
- example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4"
- docType:
+ example: "a12e9i84"
+ description: "Registration id used for regulatory purposes."
+ companyName:
type: "string"
- example: "24(c) Registration"
- description: "Type of document for this product."
+ description: "The brand of the fertilizer."
+ example: "Monsanto"
x-required-boolean: true
- productErid:
+ materialClassification:
type: "string"
- example: "388ab719-277d-4032-a2c3-40a297d8f482"
- description: "The Unique id of the product."
- x-required-boolean: true
- description:
+ enum:
+ - "DRY"
+ - "LIQUID"
+ - "GAS"
+ example: "LIQUID"
+ description: "Specifies the state of the fertilizer."
+ category:
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:
+ enum:
+ - "FERTILIZER"
+ example: "FERTILIZER"
+ type:
type: "string"
- example: "ld7OD026.pdf"
- description: "The filename of the document."
+ nullable: false
+ enum:
+ - "MANURE"
+ - "FERTILIZER"
+ description: "The type for the fertilizer."
x-required-boolean: true
- expirationDate:
+ 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"
- 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:
+ 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/Document"
- 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"
- 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"
- 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"
- PostVariety:
+ $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:
@@ -951,8 +6013,8 @@ components:
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
+ 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."
@@ -970,61 +6032,240 @@ components:
createdTime:
type: "string"
format: "date-time"
- example: "2017-03-21T21:12:53.865Z"
+ example: "2019-03-27T14:59:57.000Z"
description: "product created time"
modifiedTime:
type: "string"
format: "date-time"
- example: "2018-04-06T15:12:52.910Z"
+ example: "2019-03-27T14:59:57.000Z"
description: "product modified time"
- required:
- - "name"
- - "cropName"
- - "companyName"
- PutVariety:
+ 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":
- example: "Variety"
- name:
type: "string"
- example: "S73-Z5 - 50lb bag"
- description: "The common name of the variety."
- x-required-boolean: true
- cropName:
+ example: "Fertilizer"
+ id:
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."
+ 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 brand of the variety."
- example: "NK"
- x-required-boolean: true
+ 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:
- - "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
+ - "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: "product created time"
+ description: "production creation time"
modifiedTime:
type: "string"
format: "date-time"
example: "2019-03-27T14:59:57.000Z"
- description: "product modified time"
- required:
- - "name"
- - "cropName"
- - "companyName"
+ 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_Fertilizers"
+ - properties:
+ values:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/ReferenceFertilizer"
ReferenceProductOverrideStatus:
type: "object"
properties:
@@ -1042,6 +6283,44 @@ components:
example: true
errors:
$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:
@@ -1128,6 +6407,681 @@ components:
type: "array"
items:
$ref: "#/components/schemas/ReferenceVariety"
+ TankMix:
+ properties:
+ "@type":
+ type: "string"
+ 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"
+ 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: 5
+ description: "The value of the measurement as a double."
+ vrDomainId:
+ type: "string"
+ x-required-boolean: true
+ example: "vrSolutionRateLiquid"
+ description: "The domain ID for the measurement."
+ unit:
+ type: "string"
+ x-required-boolean: true
+ example: "gal1ac-1"
+ description: "The unit of measure for the value."
+ volume:
+ 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: 1200
+ description: "The volume value as a double."
+ vrDomainId:
+ type: "string"
+ x-required-boolean: true
+ example: "vrSolutionRateLiquid"
+ description: "The domain ID for the volume measurement."
+ unit:
+ type: "string"
+ 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"
+ 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 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":
+ 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."
+ 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:
+ 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:
@@ -1262,6 +7216,34 @@ components:
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"
@@ -1270,3 +7252,26 @@ components:
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 95ada41..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"
@@ -229,6 +263,12 @@ components:
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:
@@ -278,6 +318,29 @@ components:
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:
@@ -377,6 +440,20 @@ components:
examples:
Headers:
description: "204 No Content"
+ UpdatedResponse_EventSubscriptionDelivery:
+ description: "Update Subscriptions delivery"
+ content:
+ application/vnd.deere.axiom.v3+json:
+ schema:
+ properties:
+ total:
+ description: "Number of results in the list"
+ type: "integer"
+ format: "int64"
+ example: 70
+ examples:
+ Headers:
+ description: "204 No Content"
schemas:
AuthorizationHeader:
type: "string"
@@ -486,10 +563,40 @@ components:
type: "string"
description: "The value that was supplied for this field in the request"
example: "Bad value"
+ Error_EventSubscriptionDelivery:
+ 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"
+ 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"
@@ -594,6 +701,11 @@ components:
self:
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"
@@ -667,3 +779,36 @@ components:
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"
+ 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: "number"
+ description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)."
+ example: 5
+ clientKey:
+ type: "string"
+ description: "The client key used to create the subscription."
+ example: "REDACTED"
+ links:
+ 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/equipment.yaml b/specs/raw/equipment.yaml
index 0a8aaf0..865bb38 100644
--- a/specs/raw/equipment.yaml
+++ b/specs/raw/equipment.yaml
@@ -881,8 +881,7 @@ components:
type: "object"
properties:
values:
- items:
- $ref: "#/components/schemas/equipmentForList"
+ type: "array"
examples:
No Header:
value:
@@ -1030,8 +1029,7 @@ components:
type: "object"
properties:
values:
- items:
- $ref: "#/components/schemas/equipment"
+ type: "array"
examples:
No Header:
value:
diff --git a/specs/raw/field-operations-api.yaml b/specs/raw/field-operations-api.yaml
index 00eafcc..9d9c4fe 100644
--- a/specs/raw/field-operations-api.yaml
+++ b/specs/raw/field-operations-api.yaml
@@ -39,6 +39,42 @@ paths:
$ref: "#/components/responses/DoesNotHaveAccessToFieldOperations"
"404":
$ref: "#/components/responses/InputFieldOperationValueIsInvalid"
+ /fieldOperations/{operationId}/measurementTypes:
+ get:
+ 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/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/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"
@@ -101,6 +137,13 @@ components:
schema:
type: "string"
example: "METRIC"
+ Accept-UOM-System_MeasurementType:
+ name: "Accept-UOM-System"
+ in: "header"
+ description: "Desired unit system. Takes ENGLISH or METRIC."
+ schema:
+ type: "string"
+ example: "ENGLISH"
Accept-Yield-Preference:
name: "Accept-Yield-Preference"
in: "header"
@@ -109,6 +152,13 @@ components:
schema:
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"
+ example: "MASS"
CompareType:
in: "path"
required: true
@@ -191,7 +241,7 @@ components:
FieldOperationType:
in: "query"
name: "fieldOperationType"
- description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"."
+ description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"CARTING\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"."
schema:
$ref: "#/components/schemas/FieldOperationTypesEnum"
FieldOperationTypes:
@@ -229,6 +279,14 @@ components:
required: true
schema:
$ref: "#/components/schemas/FieldOperationMeasurementTypesEnum"
+ MeasurementType_MeasurementType:
+ name: "measurementType"
+ in: "path"
+ description: "Measurement Type"
+ required: false
+ schema:
+ example: "HarvestYield"
+ type: "string"
OperationId:
name: "operationId"
in: "path"
@@ -867,6 +925,17 @@ components:
type: "array"
items:
$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:
@@ -879,6 +948,119 @@ components:
application/vnd.deere.axiom.v3.location+tif+json:
schema:
$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:
+ summary: "Field Operation Measurement"
+ description: "Field Operations"
+ 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/FieldOperationMeasurementType"
+ 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:
+ 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:
+ - "@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:
+ 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:
@@ -899,6 +1081,68 @@ components:
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:
+ No Header:
+ description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json"
+ value:
+ 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:
@@ -1834,6 +2078,30 @@ components:
- "TemperatureDifference"
- "RelativeHumidity"
- "SoilTemperature"
+ FieldOperationMeasurementType:
+ properties:
+ 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: "string"
@@ -1898,6 +2166,56 @@ components:
- "TillageSpeedResult"
- "TillageDepthTarget"
- "TillagePressureTarget"
+ FieldOperationMeasurement_MeasurementType:
+ properties:
+ 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:
+ 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"
properties:
@@ -2085,6 +2403,20 @@ components:
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"
@@ -2547,3 +2879,8 @@ components:
clientCredentials:
scopes:
ag2: "ag2"
+x-source-documents:
+ - endPointName: "field-operation"
+ id: 27
+ - endPointName: "measurement-type"
+ id: 28
diff --git a/specs/raw/files.yaml b/specs/raw/files.yaml
index 70696b0..f7e2ce2 100644
--- a/specs/raw/files.yaml
+++ b/specs/raw/files.yaml
@@ -13,6 +13,144 @@ servers:
- url: "https://apidev.tal.deere.com/platform"
description: "Development API endpoint"
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"
@@ -119,6 +257,139 @@ 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.
"
+ 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: "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/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"
@@ -286,6 +557,15 @@ components:
default: "ALL"
format: "int64"
example: "MACHINE"
+ Id:
+ name: "id"
+ in: "path"
+ description: "File Transfer ID"
+ required: true
+ schema:
+ 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."
@@ -310,6 +590,23 @@ components:
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"
@@ -345,6 +642,21 @@ components:
type: "integer"
default: "N/A"
example: -1
+ 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: "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"
@@ -386,6 +698,13 @@ components:
schema:
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"
@@ -506,6 +825,86 @@ components:
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:
+ 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:
+ 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:
@@ -524,6 +923,38 @@ components:
- "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"
properties:
@@ -604,6 +1035,13 @@ components:
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":
@@ -722,3 +1160,14 @@ components:
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 8a76684..4e3fec3 100644
--- a/specs/raw/flags.yaml
+++ b/specs/raw/flags.yaml
@@ -88,6 +88,430 @@ paths:
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:
+ - "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":
+ 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:
+ schema:
+ $ref: "#/components/schemas/PutResponse"
+ examples:
+ No Header:
+ value:
+ "@type": "FlagCategory"
+ categoryTitle: "Rocks"
+ preferred: true
+ archived: 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:
+ 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"
+ 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/PutResponse"
+ examples:
+ No Header:
+ value:
+ "@type": "FlagCategory"
+ categoryTitle: "Rocks"
+ archived: false
+ preferred: true
+ responses:
+ "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: "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: "deleteFlagCategoryByIdOrgId"
+ summary: "Delete a flag category"
+ tags:
+ - "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"
+ 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: "No Content. Flag Category 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.
+
+ - 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"
@@ -313,6 +737,42 @@ components:
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"
@@ -337,6 +797,15 @@ components:
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"
@@ -354,6 +823,24 @@ components:
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:
+ 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"
@@ -397,6 +884,15 @@ components:
type: "string"
default: "N/A"
example: 123456
+ OrgId2_FlagCategories:
+ name: "orgId"
+ in: "path"
+ required: true
+ description: "Organization Id."
+ schema:
+ type: "string"
+ default: "N/A"
+ example: 123456
OrgId3:
name: "orgId"
in: "path"
@@ -406,6 +902,60 @@ components:
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: "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: 123456
+ OrgId_FlagCategories:
+ name: "orgId"
+ in: "path"
+ required: true
+ description: "OrgId to query for Org."
+ schema:
+ 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: "N/A"
+ example: 123456
+ OrganizationId:
+ name: "organizationId"
+ in: "path"
+ description: "orgId to query for preferences."
+ required: true
+ schema:
+ type: "string"
+ default: "N/A"
+ example: 123456
+ PrefKey:
+ name: "prefKey"
+ in: "query"
+ description: "CategoryId to query for preferences"
+ required: false
+ schema:
+ type: "string"
+ example: "default"
+ default: "default"
RecordFilter:
name: "recordFilter"
in: "query"
@@ -570,6 +1120,111 @@ components:
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:
@@ -605,6 +1260,26 @@ components:
field:
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:
+ 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:
@@ -664,3 +1339,10 @@ components:
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/machine-locations.yaml b/specs/raw/machine-locations.yaml
index 4f40847..7c29a72 100644
--- a/specs/raw/machine-locations.yaml
+++ b/specs/raw/machine-locations.yaml
@@ -6,6 +6,118 @@ info:
servers:
- 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:
@@ -114,11 +226,246 @@ paths:
content: {}
components:
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."
+ 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:
@@ -157,3 +504,8 @@ components:
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 58e6225..9ceb313 100644
--- a/specs/raw/map-layers.yaml
+++ b/specs/raw/map-layers.yaml
@@ -15,6 +15,76 @@ servers:
- "sandboxapi"
- "partnerapi"
paths:
+ /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: "Returns a specific Map Layer Summary resource."
@@ -103,6 +173,253 @@ 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
+ 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:
+ 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"
+ 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.
"
@@ -505,6 +822,36 @@ components:
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"
@@ -515,6 +862,35 @@ components:
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"
@@ -602,6 +978,40 @@ components:
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:
@@ -715,6 +1125,79 @@ components:
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:
+ 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:
+ 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"
@@ -753,6 +1236,39 @@ components:
type: "array"
items:
$ref: "#/components/schemas/Link"
+ FileResourceAvailableLinks:
+ properties:
+ 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":
@@ -774,6 +1290,92 @@ components:
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."
+ 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:
@@ -791,6 +1393,44 @@ components:
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:
@@ -844,6 +1484,90 @@ components:
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:
@@ -948,6 +1672,11 @@ components:
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:
@@ -982,6 +1711,17 @@ components:
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:
@@ -1036,6 +1776,68 @@ components:
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"
@@ -1044,3 +1846,24 @@ components:
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/products.yaml b/specs/raw/products.yaml
index 86bb45b..2bdb8bc 100644
--- a/specs/raw/products.yaml
+++ b/specs/raw/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,176 +25,300 @@ 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."
+ 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:
"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.\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/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"
+ description: "Organization does not exist"
contentType:
description: "The request body used to create or update a client"
content:
@@ -201,114 +326,119 @@ paths:
schema:
properties:
Content-Type: "application/vnd.deere.axiom.v3+json"
- /organizations/{organizationId}/varieties/{erid}:
+ /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:
+ 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: "cf09acfc-9196-4dbb-9b38-1be02673c5ff"
- docType: "24(c) Registration"
+ 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"
+ - "@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 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"
+ 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"
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/CommonReferenceChemical"
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"
+ overrides:
+ - key: "archived"
+ value: true
+ - key: "registration"
+ value: "EXEMPT"
+ - key: "isCarrier"
+ value: true
responses:
- "204":
- description: "The update was completed successfully"
+ "200":
+ 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_Chemicals"
examples:
Headers:
- description: "204 No Content
The update was completed successfully."
+ description: "200 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 does not have sufficient privileges to update varieties in this org"
+ description: "Invalid access to reference product associated to organization"
"404":
- description: "There is no variety matching the specified Erid"
+ description: "Organization does not exist"
contentType:
description: "The request body used to create or update a client"
content:
@@ -316,63 +446,104 @@ paths:
schema:
properties:
Content-Type: "application/vnd.deere.axiom.v3+json"
- /varieties:
+ /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."
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."
+ 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"
required: 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"
required: 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"
required: 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"
@@ -380,89 +551,105 @@ 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}/associateToOrg/{organizationId}:
+ description: "No fertilizer found matching this erid."
+ /fertilizers/{erid}/associateToOrg/{organizationId}:
post:
tags:
- - "Reference Varieties"
- summary: "Adds a single reference variety to organization"
+ - "Reference Fertilizers"
+ summary: "Adds a single reference fertilizer to organization"
security:
- OAuth2:
- "eq2"
- description: "This endpoint will associate a reference variety to your organization from the global reference list.
+ description: "This endpoint will associate a reference fertilizer to your organization from the global reference list.
- The reference varieties are immutable, however, they can still be archived or made available.
+ 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.\n"
parameters:
@@ -473,7 +660,7 @@ paths:
content:
application/vnd.deere.axiom.v3+json:
schema:
- $ref: "#/components/schemas/ReferenceProductPointerRequest"
+ $ref: "#/components/schemas/PostReferenceFertilizer"
examples:
No Header:
value:
@@ -481,22 +668,30 @@ paths:
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 association of reference fertilizer to org."
content:
application/vnd.deere.axiom.v3+json:
schema:
- type: "array"
- items:
- $ref: "#/components/schemas/ReferenceProductOverrideStatus"
+ $ref: "#/components/responses/Created"
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:
@@ -514,9 +709,7 @@ paths:
"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."
+ description: "Organization does not exist"
contentType:
description: "The request body used to create or update a client"
content:
@@ -524,24 +717,24 @@ paths:
schema:
properties:
Content-Type: "application/vnd.deere.axiom.v3+json"
- /varieties/{erid}/documents:
+ /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"
@@ -562,17 +755,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"
@@ -581,29 +780,39 @@ 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: []
+ - key: "isCarrier"
+ success: true
+ errors: []
+ - key: "registration"
+ success: true
+ errors: []
"400":
description: "Unresolvable name conflict or other error occurred."
content:
@@ -629,43 +838,2741 @@ paths:
schema:
properties:
Content-Type: "application/vnd.deere.axiom.v3+json"
-components:
- parameters:
- 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"
- 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"
+ /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"
@@ -674,6 +3581,46 @@ components:
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"
@@ -690,6 +3637,16 @@ components:
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"
@@ -698,101 +3655,2294 @@ components:
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"
- responses:
- Created:
- description: "Created"
- schemas:
- BaseResource:
+ 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:
- "@type":
+ rel:
type: "string"
- example: "BaseResource"
- id:
- description: "Primary identifier for resource."
+ 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: "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:
+ 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: "BaseResource"
- id:
- description: "Primary identifier for resource."
+ example: "MeasurementAsDouble"
+ valueAsDouble:
+ type: "number"
+ format: "double"
+ example: 3.14
+ unit:
type: "string"
- format: "uuid"
- example: "1f8c12b4-126f-11ec-82a8-0242ac130003"
- ChildVariety:
+ 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:
- - $ref: "#/components/schemas/BaseResource"
- properties:
"@type":
- example: "Variety"
- id:
+ example: "Chemical"
+ name:
type: "string"
- example: "87b4a1e7-210b-482c-8a7a-19e9f644e914"
- format: "uuid"
+ 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
- description: "The primary identifier for the variety that is unique to your organization."
- name:
+ type:
type: "string"
- example: "S73-Z5 - 50lb bag"
- description: "The common name of the variety."
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:
- - "VARIETY"
- example: "VARIETY"
+ - "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)."
- nullable: false
+ required: true
companyName:
type: "string"
description: "The brand of the variety."
example: "NK"
- nullable: false
+ 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
- nullable: false
createdTimeDEPRECATED:
type: "string"
format: "date-time"
@@ -803,174 +5953,203 @@ components:
format: "date-time"
example: "2018-04-06T15:12:52.910Z"
description: "product modified time"
- readOnly: true
- countryCode:
+ required:
+ - "name"
+ - "cropName"
+ - "companyName"
+ ProductCompany:
+ type: "object"
+ allOf:
+ - properties:
+ companyName:
type: "string"
- example: "USA"
- description: "Country of the product to which it belongs"
- parentErid:
+ 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"
- example: "b0241592-c95a-4a8b-a2f9-3e58168ac291"
- description: "Parent id of the child in which the product is merged"
- cleanupStatus:
+ format: "date-time"
+ example: "2017-03-21T21:12:53.865Z"
+ description: "product creation time"
+ modifiedTimeDEPRECATED:
type: "string"
- example: "MERGED"
- description: "Showing the status of cleanup."
- cleanupActionDate:
+ format: "date-time"
+ example: "2018-04-06T15:12:52.910Z"
+ description: "product modification time"
+ readOnly: true
+ weightUnit:
type: "string"
- example: "2025-09-22T11:24:43.855Z"
- description: "Clean up action time"
- documentsList:
+ 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/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
- CommonProductPointerRequest:
- type: "object"
- properties:
- overrides:
- nullable: true
- type: "array"
- items:
- $ref: "#/components/schemas/OverrideKeyValuePair"
- Document:
+ $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: "Document"
+ example: "Fertilizer"
+ name:
+ type: "string"
+ example: "Manure"
+ description: "The common name of the fertilizer."
required: true
- erid:
+ registration:
type: "string"
- description: "Unique id of the document"
- example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4"
- docType:
+ example: "a12e9i84"
+ description: "Registration id used for regulatory purposes."
+ companyName:
type: "string"
- example: "24(c) Registration"
- description: "Type of document for this product."
+ description: "The brand of the fertilizer."
+ example: "Monsanto"
required: true
- productErid:
+ materialClassification:
type: "string"
- example: "388ab719-277d-4032-a2c3-40a297d8f482"
- description: "The Unique id of the product."
- required: true
- description:
+ enum:
+ - "DRY"
+ - "LIQUID"
+ - "GAS"
+ example: "LIQUID"
+ description: "Specifies the state of the fertilizer."
+ category:
type: "string"
- example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed"
- description: "Information about the document."
- required: true
- fileName:
+ enum:
+ - "FERTILIZER"
+ example: "FERTILIZER"
+ type:
type: "string"
- example: "ld7OD026.pdf"
- description: "The filename of the document."
+ nullable: false
+ enum:
+ - "MANURE"
+ - "FERTILIZER"
+ description: "The type for the fertilizer."
required: true
- expirationDate:
+ 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"
- 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:
+ 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/Document"
- 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"
- 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"
- 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"
- PostVariety:
+ $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:
@@ -984,8 +6163,8 @@ components:
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
+ 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."
@@ -1003,61 +6182,248 @@ components:
createdTimeDEPRECATED:
type: "string"
format: "date-time"
- example: "2017-03-21T21:12:53.865Z"
+ example: "2019-03-27T14:59:57.000Z"
description: "product created time"
modifiedTimeDEPRECATED:
type: "string"
format: "date-time"
- example: "2018-04-06T15:12:52.910Z"
+ example: "2019-03-27T14:59:57.000Z"
description: "product modified time"
- required:
- - "name"
- - "cropName"
- - "companyName"
- PutVariety:
+ 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_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
+ 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 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."
+ epaRegistrationDEPRECATED:
+ type: "string"
+ example: "a12e9i84"
+ description: "product registration id"
+ 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"
+ 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":
- example: "Variety"
- name:
type: "string"
- example: "S73-Z5 - 50lb bag"
- description: "The common name of the variety."
- required: true
- cropName:
+ example: "Fertilizer"
+ id:
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."
+ 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 brand of the variety."
- example: "NK"
- required: true
+ 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:
- - "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
+ - "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: "product created time"
+ description: "production creation time"
modifiedTimeDEPRECATED:
type: "string"
format: "date-time"
example: "2019-03-27T14:59:57.000Z"
- description: "product modified time"
- required:
- - "name"
- - "cropName"
- - "companyName"
+ 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_Fertilizers"
+ - properties:
+ values:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/ReferenceFertilizer"
ReferenceProductOverrideStatus:
type: "object"
properties:
@@ -1075,6 +6441,44 @@ components:
example: true
errors:
$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:
@@ -1161,6 +6565,681 @@ components:
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:
+ 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"
allOf:
@@ -1295,6 +7374,34 @@ components:
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"
@@ -1303,3 +7410,26 @@ components:
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 b177b45..96032aa 100644
--- a/specs/raw/summary.json
+++ b/specs/raw/summary.json
@@ -1,141 +1,363 @@
{
- "fetchedAt": "2026-05-23T07:02:46.948Z",
+ "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/webhook.yaml b/specs/raw/webhook.yaml
index 3792f93..472304c 100644
--- a/specs/raw/webhook.yaml
+++ b/specs/raw/webhook.yaml
@@ -16,6 +16,54 @@ servers:
- "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"
@@ -257,6 +305,12 @@ components:
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:
@@ -306,6 +360,29 @@ components:
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:
@@ -405,6 +482,20 @@ components:
examples:
Headers:
description: "204 No Content"
+ UpdatedResponse_EventSubscriptionDelivery:
+ description: "Update Subscriptions delivery"
+ content:
+ application/vnd.deere.axiom.v3+json:
+ schema:
+ properties:
+ total:
+ description: "Number of results in the list"
+ type: "integer"
+ format: "int64"
+ example: 70
+ examples:
+ Headers:
+ description: "204 No Content"
schemas:
AuthorizationHeader:
type: "string"
@@ -514,10 +605,40 @@ components:
type: "string"
description: "The value that was supplied for this field in the request"
example: "Bad value"
+ Error_EventSubscriptionDelivery:
+ 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"
+ 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"
@@ -622,6 +743,11 @@ components:
self:
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"
@@ -695,3 +821,60 @@ components:
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"
+ 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: "number"
+ description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)."
+ example: 5
+ 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:
+ 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/equipment.ts b/src/api/equipment.ts
index e3151d0..55d933b 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,11 +65,7 @@ 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
- );
+ return this.client.get>(this.spec, path, options);
}
/**
@@ -84,12 +80,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);
}
/**
diff --git a/src/api/field-operations-api.ts b/src/api/field-operations-api.ts
index c170e56..f46fbf4 100644
--- a/src/api/field-operations-api.ts
+++ b/src/api/field-operations-api.ts
@@ -36,6 +36,81 @@ export class FieldOperationsApi {
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.
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 1588deb..1459fc6 100644
--- a/src/api/flags.ts
+++ b/src/api/flags.ts
@@ -94,6 +94,155 @@ export class FlagsApi {
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
+ );
+ }
+
+ /**
+ * Create a custom category
+ * @description This resource will create a custom category in the given
+ * organization.
+ * @generated from POST /organizations/{orgId}/flagCategories
+ */
+ async createFlagCategories(
+ orgId: string,
+ data: components['schemas']['PutResponse'],
+ options?: RequestOptions
+ ): Promise {
+ const path = `/organizations/${orgId}/flagCategories`;
+ await this.client.post(this.spec, path, data, options);
+ }
+
+ /**
+ * 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 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.
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 8c89426..3b9c50f 100644
--- a/src/api/map-layers.ts
+++ b/src/api/map-layers.ts
@@ -17,6 +17,42 @@ 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.
@@ -45,6 +81,100 @@ export class MapLayersApi {
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