Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf’s unified credentials API.
Leaf connects to agricultural data providers on behalf of your users. You store provider credentials on a Leaf user, and Leaf handles token refresh, data synchronization, and retry logic from that point forward.
Each provider requires its own set of credentials, typically obtained through an OAuth 2.0 flow that your application manages or that Leaf’s Magic Link widget handles for you.The general sequence:
Register as a developer/partner with the provider and receive your app-level credentials (client ID, client secret, API keys, etc.).
Guide the grower through the provider’s OAuth consent flow to obtain a refresh token.
POST those credentials to the appropriate Leaf endpoint for the Leaf user: /users/{leafUserId}/{provider}-credentials.
Leaf validates the credentials, begins syncing fields and machine files, and keeps the token refreshed automatically.
All provider credential endpoints live under the User Management service:
Most providers use OAuth 2.0 with a refresh token. You complete the OAuth flow on your side (or use Magic Link) and pass the resulting tokens to Leaf. Leaf exchanges and refreshes tokens as needed.Some providers use API key authentication instead of OAuth. Sentera uses username/password. Raven Slingshot uses an API key with access key and shared secret. The credential schema for each provider is documented on its respective page.
Several providers offer sandbox or staging environments alongside production. John Deere, CNHi, CNHI FieldOps, Agvance, and Precision Planting Panorama support a clientEnvironment field that accepts STAGE or PRODUCTION. Set this when creating credentials.
Leaf does not provide a separate test environment. Use distinct API owners (e.g., leaf-test@company.com vs. leaf-production@company.com) to separate test and production activity. Testing against large accounts without using customDataSync can consume acre allotments quickly.
Leaf syncs the provider’s field structure (growers, farms, fields) based on your fieldsAutoSync configuration.
Machine files are fetched and converted to Leaf’s standard canonical format (available as GeoJSON or GeoParquet).
Field operations are created by spatially allocating machine file data against field boundaries.
Subsequent syncs run at least every 24 hours. Providers with event-driven APIs (like John Deere) trigger syncs sooner.
You can monitor credential health using the events endpoint available for each provider: GET /users/{leafUserId}/{provider}-credentials/events. Event logs are retained for 30 days.
If you don’t want to build the OAuth flow yourself, Leaf provides Magic Link and Leaf Link widgets. These handle the provider consent flow and credential storage automatically. You register your provider app keys with Leaf’s /app-keys/ endpoints, then generate a link or embed the widget.See the Magic Link documentation for setup details.
Multi-provider ingestion: Connect a grower’s John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and other accounts to a single Leaf user and receive all their data in one standard format.
Grower onboarding: Use Magic Link to let growers connect their own provider accounts without your app handling OAuth flows directly.
Credential monitoring: Subscribe to credential alert events to detect token expirations or revoked access before it affects data flow.
Organization scoping: For John Deere accounts with many organizations, use organizationDataSync to limit which organizations Leaf processes.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Leaf Documentation","colors":{"primary":"#00886b","light":"#07C983","dark":"#00886b"},"logo":{"light":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/light.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=8ce24e422c9bf087336b65351eb51f4c","dark":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/dark.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=7c5b24b746c2c02501ac6fea486c3a51","href":"https://withleaf.io/"},"favicon":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/favicon.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=a435f8f25c1ed914dc32b03c92d844cd","appearance":{"default":"light"},"background":{"color":{"light":"#ffffff","dark":"#18191a"}},"navbar":{"links":[{"icon":"github","href":"https://status.withleaf.io","label":"API Status"},{"href":"https://dashboard.withleaf.io","label":"Log In"}],"primary":{"type":"button","label":"Request Demo","href":"https://withleaf.io/account/get-a-demo"}},"footer":{"socials":{"instagram":"https://www.instagram.com/withleaf_","linkedin":"https://www.linkedin.com/company/leaf-agriculture","x":"https://twitter.com/LeafAgriculture","youtube":"https://www.youtube.com/@leafagriculture7933"}},"seo":{"metatags":{"robots":"noindex"},"indexing":"navigable"},"fonts":{"heading":{"family":"Satoshi","source":"https://cdn.fontshare.com/wf/P2LQKHE6KA6ZP4AAGN72KDWMHH6ZH3TA/ZC32TK2P7FPS5GFTL46EU6KQJA24ZYDB/7AHDUZ4A7LFLVFUIFSARGIWCRQJHISQP.woff2","format":"woff2"},"body":{"family":"Inter"}},"integrations":{"mixpanel":{"projectToken":"2aa8982706dc53402184ef7b6e555d32"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"About Us","icon":"circle-user","href":"https://withleaf.io/company"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"leaf-3ed5893a","hasAudioNarration":false,"actualSubdomain":"leaf-3ed5893a","customDomains":["docs.withleaf.io"],"gitSource":{"type":"github","owner":"leaf-agriculture","repo":"docs-v2","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea55583593d9bacc3250df","collectionId":"c5ff0339-6713-4bbb-8aca-078af8401d84","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea55583593d9bacc3250df"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea55583593d9bacc3250df","clientVersion":"0.0.4064","searchFilterCounts":[{"language":"default","tag":"Documentation","count":58},{"language":"default","tag":"API Reference","count":25},{"language":"default","tag":"Guides","count":21},{"language":"default","tag":"Tutorials","count":16},{"language":"default","tag":"Connecting Providers","count":16},{"language":"default","tag":"Beta","count":10},{"language":"default","tag":"Data Hierarchy","count":9},{"language":"default","tag":"OEM and Provider Integrations","count":8},{"language":"default","tag":"Machine Data","count":6},{"language":"default","tag":"Resources","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"help@withleaf.io","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles/globals.css","content":".get,.post,.put,.patch,.delete{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;font-family:monospace}.get{background-color:#00866d;color:white}.post{background-color:#edc043;color:white}.patch{background-color:#edc043;color:white}.delete{background-color:#f25925;color:white}.put{background-color:#edc043;color:white}"}],"page":{"pagePath":"providers/overview","slug":"/providers/overview","pageMetadata":{"title":"Provider Authentication","sidebarTitle":"Overview","description":"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf's unified credentials API.","href":"/providers/overview"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf’s unified credentials API.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Leaf connects to agricultural data providers on behalf of your users. You store provider credentials on a Leaf user, and Leaf handles token refresh, data synchronization, and retry logic from that point forward.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`Each provider requires its own set of credentials, typically obtained through an OAuth 2.0 flow that your application manages or that Leaf’s Magic Link widget handles for you.`}),`\n`,_jsx(_components.p,{children:`The general sequence:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Register as a developer/partner with the provider and receive your app-level credentials (client ID, client secret, API keys, etc.).`}),`\n`,_jsx(_components.li,{children:`Guide the grower through the provider’s OAuth consent flow to obtain a refresh token.`}),`\n`,_jsxs(_components.li,{children:[`POST those credentials to the appropriate Leaf endpoint for the Leaf user: `,_jsx(_components.code,{children:`/users/{leafUserId}/{provider}-credentials`}),`.`]}),`\n`,_jsx(_components.li,{children:`Leaf validates the credentials, begins syncing fields and machine files, and keeps the token refreshed automatically.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`All provider credential endpoints live under the User Management service:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.withleaf.io/services/usermanagement/api`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Each provider follows the same three-endpoint pattern:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Action`}),_jsx(_components.th,{children:`Method`}),_jsx(_components.th,{children:`Path`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Get credentials`}),_jsx(_components.td,{children:`GET`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/users/{leafUserId}/{provider}-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Create credentials`}),_jsx(_components.td,{children:`POST`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/users/{leafUserId}/{provider}-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Delete credentials`}),_jsx(_components.td,{children:`DELETE`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/users/{leafUserId}/{provider}-credentials`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication-patterns`,children:`Authentication patterns`}),`\n`,_jsx(_components.p,{children:`Most providers use OAuth 2.0 with a refresh token. You complete the OAuth flow on your side (or use Magic Link) and pass the resulting tokens to Leaf. Leaf exchanges and refreshes tokens as needed.`}),`\n`,_jsx(_components.p,{children:`Some providers use API key authentication instead of OAuth. Sentera uses username/password. Raven Slingshot uses an API key with access key and shared secret. The credential schema for each provider is documented on its respective page.`}),`\n`,_jsx(Heading,{level:`2`,id:`environments`,children:`Environments`}),`\n`,_jsxs(_components.p,{children:[`Several providers offer sandbox or staging environments alongside production. John Deere, CNHi, CNHI FieldOps, Agvance, and Precision Planting Panorama support a `,_jsx(_components.code,{children:`clientEnvironment`}),` field that accepts `,_jsx(_components.code,{children:`STAGE`}),` or `,_jsx(_components.code,{children:`PRODUCTION`}),`. Set this when creating credentials.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Leaf does not provide a separate test environment. Use distinct API owners (e.g., `,_jsx(_components.code,{children:`leaf-test@company.com`}),` vs. `,_jsx(_components.code,{children:`leaf-production@company.com`}),`) to separate test and production activity. Testing against large accounts without using `,_jsx(_components.code,{children:`customDataSync`}),` can consume acre allotments quickly.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-after-connection`,children:`What happens after connection`}),`\n`,_jsx(_components.p,{children:`Once credentials are attached to a Leaf user:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Leaf syncs the provider’s field structure (growers, farms, fields) based on your `,_jsx(_components.code,{children:`fieldsAutoSync`}),` configuration.`]}),`\n`,_jsx(_components.li,{children:`Machine files are fetched and converted to Leaf’s standard canonical format (available as GeoJSON or GeoParquet).`}),`\n`,_jsx(_components.li,{children:`Field operations are created by spatially allocating machine file data against field boundaries.`}),`\n`,_jsx(_components.li,{children:`Subsequent syncs run at least every 24 hours. Providers with event-driven APIs (like John Deere) trigger syncs sooner.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`You can monitor credential health using the events endpoint available for each provider: `,_jsx(_components.code,{children:`GET /users/{leafUserId}/{provider}-credentials/events`}),`. Event logs are retained for 30 days.`]}),`\n`,_jsx(Heading,{level:`2`,id:`connecting-via-magic-link`,children:`Connecting via Magic Link`}),`\n`,_jsxs(_components.p,{children:[`If you don’t want to build the OAuth flow yourself, Leaf provides Magic Link and Leaf Link widgets. These handle the provider consent flow and credential storage automatically. You register your provider app keys with Leaf’s `,_jsx(_components.code,{children:`/app-keys/`}),` endpoints, then generate a link or embed the widget.`]}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/components/magic-link`,children:`Magic Link documentation`}),` for setup details.`]}),`\n`,_jsx(Heading,{level:`2`,id:`supported-providers`,children:`Supported providers`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Auth type`}),_jsx(_components.th,{children:`Environments`}),_jsx(_components.th,{children:`Credential endpoint suffix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/john-deere`,children:`John Deere`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`john-deere-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/claas`,children:`CLAAS`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`claas-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/climate-fieldview`,children:`Climate FieldView`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`climate-field-view-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/cnhi`,children:`CNHI (AFS Connect - Legacy)`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`cnhi-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/cnhi-fieldops`,children:`CNHI FieldOps`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`cnhi-field-ops-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/trimble`,children:`Trimble`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`trimble-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/agleader`,children:`AgLeader`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`ag-leader-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/raven`,children:`Raven`})}),_jsx(_components.td,{children:`OAuth 2.0`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`raven-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/raven-slingshot`,children:`Raven Slingshot`})}),_jsx(_components.td,{children:`API key`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`raven-slingshot-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/stara`,children:`Stara`})}),_jsx(_components.td,{children:`API key + OAuth`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`stara-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/sentera`,children:`Sentera`})}),_jsx(_components.td,{children:`Username/password`}),_jsx(_components.td,{children:`Production only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`sentera-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/agvance`,children:`Agvance`})}),_jsx(_components.td,{children:`API key + credentials`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`agvance-credentials`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/providers/panorama`,children:`Panorama`})}),_jsx(_components.td,{children:`OAuth 2.0 (Cognito)`}),_jsx(_components.td,{children:`STAGE, PRODUCTION`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`panorama-credentials`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`common-use-cases`,children:`Common use cases`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Multi-provider ingestion`}),`: Connect a grower’s John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and other accounts to a single Leaf user and receive all their data in one standard format.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Grower onboarding`}),`: Use Magic Link to let growers connect their own provider accounts without your app handling OAuth flows directly.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Credential monitoring`}),`: Subscribe to credential alert events to detect token expirations or revoked access before it affects data flow.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Organization scoping`}),`: For John Deere accounts with many organizations, use `,_jsx(_components.code,{children:`organizationDataSync`}),` to limit which organizations Leaf processes.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-to-do-next`,children:`What to do next`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Set up credentials for your first provider. We recommend starting with `,_jsx(_components.a,{href:`/providers/john-deere`,children:`John Deere`}),` or `,_jsx(_components.a,{href:`/providers/climate-fieldview`,children:`Climate FieldView`}),` as they are the most common.`]}),`\n`,_jsxs(_components.li,{children:[`Configure `,_jsx(_components.a,{href:`/alerts/overview`,children:`alerts`}),` to receive notifications when credentials change status.`]}),`\n`,_jsxs(_components.li,{children:[`Review `,_jsx(_components.a,{href:`/providers/organizations`,children:`organizations`}),` if you need to control which provider organizations sync data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-reference/providers`,children:`API Reference: Providers`}),` — Full endpoint reference for provider credentials.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Provider Authentication","sidebarTitle":"Overview","description":"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf's unified credentials API.","href":"/providers/overview"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Authentication patterns","slug":"authentication-patterns","depth":2,"children":[]},{"title":"Environments","slug":"environments","depth":2,"children":[]},{"title":"What happens after connection","slug":"what-happens-after-connection","depth":2,"children":[]},{"title":"Connecting via Magic Link","slug":"connecting-via-magic-link","depth":2,"children":[]},{"title":"Supported providers","slug":"supported-providers","depth":2,"children":[]},{"title":"Common use cases","slug":"common-use-cases","depth":2,"children":[]},{"title":"What to do next","slug":"what-to-do-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"leaf-3ed5893a","siteName":"Leaf Documentation","title":"Provider Authentication - Leaf Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-18T00:11:24.747Z","gitLastModified":"2026-05-18T00:11:08.000Z","originalFileLocation":"providers/overview.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf\u0026#x27;s unified credentials API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Leaf Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Provider Authentication - Leaf Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf\u0026#x27;s unified credentials API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Leaf Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.withleaf.io/providers/overview\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://leaf-3ed5893a.mintlify.app/_mintlify/api/og/v2?division=Connecting+Providers\u0026amp;title=Provider+Authentication\u0026amp;description=Connect+to+providers+like+John+Deere+Operations+Center%2C+Climate+FieldView%2C+CNHi%2C+CNHI+FieldOps%2C+and+Trimble+through+Leaf%27s+unified+credentials+API.\u0026amp;theme=df28ea0c62b563cc8e5aedca\u0026amp;signature=1764a54e433fdc51900f9ee1142e440a641bff031e7cd7d452de0c188f1031db\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Provider Authentication - Leaf Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf\u0026#x27;s unified credentials API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://leaf-3ed5893a.mintlify.app/_mintlify/api/og/v2?division=Connecting+Providers\u0026amp;title=Provider+Authentication\u0026amp;description=Connect+to+providers+like+John+Deere+Operations+Center%2C+Climate+FieldView%2C+CNHi%2C+CNHI+FieldOps%2C+and+Trimble+through+Leaf%27s+unified+credentials+API.\u0026amp;theme=df28ea0c62b563cc8e5aedca\u0026amp;signature=1764a54e433fdc51900f9ee1142e440a641bff031e7cd7d452de0c188f1031db\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Leaf Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00886b\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.withleaf.io/providers/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/providers/overview.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.withleaf.io/#organization\",\"name\":\"Leaf Documentation\",\"url\":\"https://docs.withleaf.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/light.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=8ce24e422c9bf087336b65351eb51f4c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.withleaf.io#website\",\"name\":\"Leaf Documentation\",\"url\":\"https://docs.withleaf.io\",\"publisher\":{\"@id\":\"https://docs.withleaf.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.withleaf.io/providers/overview#webpage\",\"url\":\"https://docs.withleaf.io/providers/overview\",\"name\":\"Provider Authentication\",\"description\":\"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf's unified credentials API.\",\"dateModified\":\"2026-05-18T00:11:08.000Z\",\"isPartOf\":{\"@id\":\"https://docs.withleaf.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.withleaf.io/providers/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.withleaf.io/providers/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Leaf Documentation\",\"item\":\"https://docs.withleaf.io\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Provider Authentication\",\"item\":\"https://docs.withleaf.io/providers/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.withleaf.io/providers/overview#article\",\"headline\":\"Provider Authentication\",\"name\":\"Provider Authentication\",\"description\":\"Connect to providers like John Deere Operations Center, Climate FieldView, CNHi, CNHI FieldOps, and Trimble through Leaf's unified credentials API.\",\"url\":\"https://docs.withleaf.io/providers/overview\",\"mainEntityOfPage\":{\"@id\":\"https://docs.withleaf.io/providers/overview#webpage\"},\"dateModified\":\"2026-05-18T00:11:08.000Z\",\"publisher\":{\"@id\":\"https://docs.withleaf.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.withleaf.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Leaf Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Leaf Documentation","nav":{"global":{"anchors":[{"anchor":"About Us","icon":"circle-user","href":"https://withleaf.io/company"}]},"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Documentation","icon":"book-open","pages":[{"group":"Getting Started","pages":[{"title":"Welcome to Leaf","sidebarTitle":"Welcome","href":"/getting-started/welcome"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/getting-started/quickstart"},{"title":"Core Concepts","sidebarTitle":"Core Concepts","href":"/getting-started/core-concepts"},{"title":"Authentication","sidebarTitle":"Authentication","href":"/getting-started/authentication"}]},{"group":"Configuration","pages":[{"title":"Configurations","sidebarTitle":"Overview","href":"/configuration/overview"},{"title":"Configuration Reference","sidebarTitle":"Reference","href":"/configuration/reference"}]},{"group":"Alerts","pages":[{"title":"Alerts Overview","sidebarTitle":"Overview","href":"/alerts/overview"},{"title":"Alert Events","sidebarTitle":"Events","href":"/alerts/events"},{"title":"Alert Authentication","sidebarTitle":"Authentication","href":"/alerts/authentication"}]},{"group":"Leaf Users","pages":[{"title":"Leaf Users","sidebarTitle":"Overview","description":"Leaf users are the central organizing concept in the API. Each holds provider credentials, and all fields, machine files, and field operations belong to one.","href":"/leaf-users/overview"}]},{"group":"Connecting Providers","pages":[{"title":"Provider Authentication","sidebarTitle":"Overview","href":"/providers/overview"},{"title":"John Deere","sidebarTitle":"John Deere","description":"Connect to John Deere Operations Center to pull field boundaries, machine files, and field operations through Leaf's provider credentials API.","href":"/providers/john-deere"},{"title":"Climate FieldView","sidebarTitle":"Climate FieldView","href":"/providers/climate-fieldview"},{"title":"CLAAS","sidebarTitle":"CLAAS","href":"/providers/claas"},{"title":"CNHi (AFS Connect)","sidebarTitle":"CNHI (AFS Connect - Legacy)","href":"/providers/cnhi"},{"title":"CNHI FieldOps","sidebarTitle":"CNHI FieldOps","href":"/providers/cnhi-fieldops"},{"title":"Trimble","sidebarTitle":"Trimble","href":"/providers/trimble"},{"title":"AgLeader","sidebarTitle":"AgLeader","href":"/providers/agleader"},{"title":"Raven","sidebarTitle":"Raven","href":"/providers/raven"},{"title":"Raven Slingshot","sidebarTitle":"Raven Slingshot","href":"/providers/raven-slingshot"},{"title":"Stara","sidebarTitle":"Stara","href":"/providers/stara"},{"title":"Sentera","sidebarTitle":"Sentera","href":"/providers/sentera"},{"title":"Agvance","sidebarTitle":"Agvance","href":"/providers/agvance"},{"title":"Precision Planting Panorama","sidebarTitle":"Panorama","href":"/providers/panorama"},{"title":"Lindsay","sidebarTitle":"Lindsay","href":"/providers/lindsay"},{"title":"Valley","sidebarTitle":"Valley","href":"/providers/valley"}]},{"group":"Data Hierarchy","pages":[{"title":"Fields Overview","sidebarTitle":"Overview","href":"/fields/overview"},{"title":"Provider Organizations","sidebarTitle":"Organizations","href":"/providers/organizations"},{"title":"Growers","sidebarTitle":"Growers","href":"/fields/growers"},{"title":"Managing Fields","sidebarTitle":"Fields","href":"/fields/managing-fields"},{"title":"Uploading Boundaries","sidebarTitle":"Boundaries","href":"/fields/uploading-boundaries"}]},{"group":"Machine Data","pages":[{"title":"Machine Data Overview","sidebarTitle":"Overview","href":"/machine-data/overview"},{"title":"Uploading Files","sidebarTitle":"Uploading Files","href":"/machine-data/uploading-files"},{"title":"File Conversion","sidebarTitle":"File Conversion","href":"/machine-data/file-conversion"},{"title":"Field Operations","sidebarTitle":"Field Operations","href":"/machine-data/field-operations"},{"title":"Sample Output","sidebarTitle":"Sample Output","href":"/machine-data/sample-output"},{"title":"Units","sidebarTitle":"Units","href":"/machine-data/units"}]},{"group":"Satellite Imagery","pages":[{"title":"Satellite Imagery Overview","sidebarTitle":"Overview","href":"/satellite/overview"},{"title":"Sentinel-2","sidebarTitle":"Sentinel-2","href":"/satellite/sentinel"},{"title":"PlanetScope","sidebarTitle":"PlanetScope","href":"/satellite/planet"},{"title":"Satellite Images v2","sidebarTitle":"Images v2","href":"/satellite/images-v2"}]},{"group":"Weather","pages":[{"title":"Weather Overview","sidebarTitle":"Overview","href":"/weather/overview"}]},{"group":"Soil Sampling","pages":[{"title":"Soil Sampling Overview","sidebarTitle":"Overview","href":"/soil/overview"},{"title":"Supported Soil Formats","sidebarTitle":"Supported Formats","href":"/soil/supported-formats"}]},{"group":"Leaf Lake","pages":[{"title":"Leaf Lake Overview","sidebarTitle":"Overview","href":"/leaf-lake/overview"},{"title":"Querying Leaf Lake","sidebarTitle":"Schema \u0026 Queries","href":"/leaf-lake/querying"}]},{"group":"UI Components","pages":[{"title":"Leaf Link","sidebarTitle":"Leaf Link","href":"/components/leaf-link"},{"title":"Magic Link","sidebarTitle":"Magic Link","href":"/components/magic-link"}]},{"group":"MCP Server","pages":[{"title":"MCP Server","sidebarTitle":"Overview","href":"/mcp/overview"},{"title":"MCP Tools Reference","sidebarTitle":"Tools Reference","href":"/mcp/tools-reference"}]},{"group":"Irrigation","pages":[{"title":"Irrigation Overview","sidebarTitle":"Overview","href":"/irrigation/overview"}]},{"group":"Beta","pages":[{"title":"Beta Features","sidebarTitle":"Overview","href":"/beta/overview"},{"title":"Assets","sidebarTitle":"Assets","href":"/beta/assets"},{"title":"Prescriptions","sidebarTitle":"Prescriptions","href":"/beta/prescriptions"},{"title":"Layers","sidebarTitle":"Layers","href":"/beta/layers"},{"title":"Input Validator","sidebarTitle":"Input Validator","href":"/beta/input-validator"},{"title":"Operations Planning","sidebarTitle":"Operations Planning","href":"/beta/operations-planning"}]},{"group":"Administration","pages":[{"title":"Usage Tracking","sidebarTitle":"Usage Tracking","href":"/billing/overview"}]},{"group":"Sharing Data","hidden":true,"pages":[{"title":"Leaf Connect","sidebarTitle":"Leaf Connect","href":"/components/leaf-connect"}]}]},{"tab":"Guides","icon":"lightbulb","pages":[{"title":"Guides","href":"/guides/by-use-case/managed-service-provider"}]},{"tab":"API Reference","icon":"code-simple","pages":[{"title":"API Reference","href":"/api-reference/authentication"}]},{"tab":"Resources","icon":"books","pages":[{"title":"Resources","href":"/resources/glossary"}]}]},"basePath":"","title":"Provider Authentication - Leaf Documentation","buildId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","deploymentId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","dynamics":[],"chunks":[]}