The Climate Corporation Uploads API
General data upload endpoints.
General data upload endpoints.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/the-climate-corporation-uploads-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Climate FieldView Platform Uploads API
description: '**Last Modified**: Mon Dec 8 16:27:39 UTC 2025
All endpoints are only accessible via HTTPS.'
contact:
name: Climate FieldView Support
email: developer@climate.com
version: 4.0.11
servers:
- url: https://platform.climate.com/
tags:
- name: Uploads
description: General data upload endpoints.
paths:
/v4/uploads:
post:
summary: Initiate a new upload
description: Step one in uploading a data product.
operationId: postUpload
tags:
- Uploads
security:
- api_key: []
- oauth2_authorization_code:
- platform
- fields:write
- imagery:write
- rx:write
- standCount:write
- weedCount:write
- asApplied:write
- asPlanted:write
- asHarvested:write
parameters:
- $ref: '#/components/parameters/X-Recipient-Email'
responses:
'201':
$ref: '#/components/responses/PostUploadOk'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Upload'
/v4/uploads/{uploadId}:
put:
summary: Chunked upload of data
description: Send chunked data for an **Upload**.
operationId: chunkedUpload
tags:
- Uploads
security:
- api_key: []
- oauth2_authorization_code:
- platform
- fields:write
- imagery:write
- rx:write
- soil:write
- asApplied:write
- asPlanted:write
- asHarvested:write
parameters:
- $ref: '#/components/parameters/ContentRange'
- $ref: '#/components/parameters/UploadId'
- $ref: '#/components/parameters/BinaryContentType'
responses:
'204':
$ref: '#/components/responses/204'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
/v4/uploads/{uploadId}/status:
get:
summary: Retrieve Upload status
description: Check the status of an **Upload** by ID.
operationId: fetchUploadStatusById
tags:
- Uploads
security:
- api_key: []
- oauth2_authorization_code:
- platform
- fields:write
- imagery:write
- rx:write
- asApplied:write
- asPlanted:write
- asHarvested:write
parameters:
- $ref: '#/components/parameters/UploadId'
responses:
'200':
$ref: '#/components/responses/FetchUploadStatusByIdOk'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
/v4/uploads/status/query:
post:
summary: Retrieve Upload statuses in batch
description: Check the status of multiple **Uploads** (up to 100 per request).
operationId: fetchUploadStatuses
tags:
- Uploads
security:
- api_key: []
- oauth2_authorization_code:
- platform
- fields:write
- imagery:write
- rx:write
- asApplied:write
- asPlanted:write
- asHarvested:write
responses:
'200':
$ref: '#/components/responses/FetchUploadStatusesOk'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UploadStatusQuery'
components:
responses:
FetchUploadStatusByIdOk:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UploadStatus'
'403':
description: Forbidden
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
FetchUploadStatusesOk:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UploadStatuses'
'401':
description: Unauthorized
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Input
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'204':
description: No Content
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
'404':
description: Not Found
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Server Busy
headers:
X-Http-Request-Id:
description: Unique identifier assigned to the request.
schema:
type: string
Retry-After:
description: Number of seconds to wait before retrying the request.
schema:
type: integer
format: int32
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
PostUploadOk:
description: Returns a new upload with ID used to PUT file contents.
headers:
X-Http-Request-Id:
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/CreatedUpload'
schemas:
Error:
type: object
properties:
error:
type: object
required:
- id
- code
- message
properties:
id:
type: string
format: uuid
code:
type: string
message:
type: string
description: Description of the error encountered.
UploadStatusQuery:
type: object
required:
- ids
properties:
ids:
type: array
items:
description: Unique identifier for the upload.
type: string
format: uuid
UploadStatuses:
type: object
required:
- results
properties:
results:
type: array
items:
$ref: '#/components/schemas/UploadStatus'
Metadata:
type: object
additionalProperties: true
Upload:
type: object
description: Client request to upload data for a user.
required:
- contentType
- md5
- length
properties:
contentType:
type: string
enum:
- image/vnd.climate.thermal.geotiff
- image/vnd.climate.ndvi.geotiff
- image/vnd.climate.rgb.geotiff
- image/vnd.climate.rgb-nir.geotiff
- image/vnd.climate.rgb-cir.geotiff
- image/vnd.climate.waterstress.geotiff
- image/vnd.climate.elevation.geotiff
- image/vnd.climate.raw.geotiff
- application/vnd.climate.field.geojson
- application/vnd.climate.rx.planting.shp
- application/vnd.climate.prescription.zones.shp
- application/vnd.climate.modus.xml
- application/vnd.climate.as-applied.zip
- application/vnd.climate.as-planted.zip
- application/vnd.climate.as-harvested.zip
format: mime-type
description: Content type representing data being uploaded (e.g. image/vnd.climate.rgb.geotiff)
md5:
type: string
description: Base64 encoded md5 hash of the content
length:
type: integer
format: int64
description: Content size in bytes
metadata:
$ref: '#/components/schemas/Metadata'
UploadStatus:
type: object
required:
- id
- status
properties:
id:
description: Unique identifier for the upload.
type: string
format: uuid
status:
description: "Current status of the upload:\n * `UPLOADING` - Uploading has started, parts are still coming in.\n * `INVALID` - Upload has failed validity check.\n * `PENDING` - Upload has been received by Climate and is being processed.\n * `INBOX` - The upload is awaiting user acceptance in their Data Inbox.\n * `DECLINED` - The user has declined the upload in their Data Inbox.\n * `IMPORTING` - The user has accepted the upload and it is being imported into their account.\n * `SUCCESS` - The upload has been successfully imported.\n"
type: string
enum:
- UPLOADING
- INVALID
- PENDING
- INBOX
- DECLINED
- IMPORTING
- SUCCESS
CreatedUpload:
type: string
format: uuid
description: Successfully created upload request
parameters:
ContentRange:
in: header
name: Content-Range
description: Byte range `bytes start-end/total` (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16). e.g. bytes 0-5242880/10242880. Downloads larger than 5MiB (5242880 bytes) in size must be downloaded in chunks no larger than 5MiB (5242880 bytes) and no smaller than 1MiB (1048576 bytes). The last chunk could be less than 1MiB (1048576 bytes).
required: true
schema:
type: string
BinaryContentType:
in: header
name: Content-Type
description: Must be `application/octet-stream`
required: true
schema:
type: string
UploadId:
in: path
description: Unique identifier of an Upload.
name: uploadId
required: true
schema:
type: string
format: uuid
X-Recipient-Email:
in: header
name: X-Recipient-Email
description: Email address associated with a Climate account, used when to sending to another user.
required: false
schema:
type: string
securitySchemes:
oauth2_authorization_code:
description: 'Log in with FieldView OAuth2 provider (Authorization Code Grant). Used to authorize the client (partner) and
user. The *access_token* is required to be provided in the `Authorization` header on all calls to the FieldView
APIs with the following format `Bearer $access_token`.'
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://climate.com/static/app-login/
tokenUrl: https://api.climate.com/api/oauth/token
scopes:
platform: (DEPRECATED) Legacy scope used for some Platform APIs
fields:read: Required for retrieving field and boundary information
farmOrganizations:read: Required for retrieving farm organization information
operations:read: Required for retrieving operation information
resourceOwners:read: Required for retrieving resource owner information
scouting:read: Required for retrieving user\'s scouting information
exports:read: Required for requesting or retrieving exports
fields:write: Required for uploading field boundaries
imagery:write: Required for uploading imagery
rx:write: Required for uploading prescriptions
soil:write: Required for uploading soil sample results
asApplied:read: Required for retrieving as applied data
asApplied:write: Required for uploading application data
asPlanted:read: Required for retrieving planting data
asPlanted:write: Required for uploading planting data
asHarvested:read: Required for retrieving harvest data
asHarvested:write: Required for uploading harvest data
diagnostics:read: Required for retrieving CNH machine diagnostic data
plantingActivitySummary:read: Required for retrieving planting activity summary data
customerInsights:read: Required for retrieving customer insights metrics data
avroAgronomicData:read: Required for retrieving agronomic data
api_key:
description: 'API access key used to control throttling (429 responses). This key is typically formatted:
`partner-{name}-{uuid}`'
type: apiKey
name: X-Api-Key
in: header
x-amazon-apigateway-api-key-source: AUTHORIZER