Create a Vegetation Index Profile, and keep it updated all season
A Vegetation Index (VI) Profile is a season-long time series, not a one-time map — you create it once, and it's meant to be checked back on throughout the season as new satellite imagery comes in. This guide covers both: creating the profile, and the right way to keep pulling fresh data from it.
This guide shows the happy path end to end. For every field, status code, and edge case, see the Vegetation Index (VI) Profile reference.
Before you start
You need:
- A registered field, and its
FIELD_UUID. - A Season that already exists for your company, and its
season_id— the profile's time window comes from the season's ownstart_date/end_date, not from anything you supply directly. See Seasons if you need to create one first. - A bearer token with
vi-profile.createandvi-profile.viewpermissions.
Step 1: Create the profile — once
POST /profiles/vegetation-index-profile/orders/. Unlike the map products, this only takes a field and a season — no dates, no output-format options.
curl -X POST https://backend.spacenus.de/api/v1.2/profiles/vegetation-index-profile/orders/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"field_uuid": "FIELD_UUID",
"season_id": 42
}'{
"status": "success",
"message": "VI Profile processing started successfully.",
"data": {
"order_id": "ORDER_ID",
"status": "processing"
}
}Do this once per field and season, not every time you want fresh data. A profile for the same field + season combination is permanently deduplicated — a second create request comes back as a 409 with the existing profile, forever, not a fresh one. To get updated data, you retrieve the same profile again (Step 3) — you never re-create it.
Step 2: Wait for the first result
Same as any ANA order — status moves from "processing" to "active" once the pipeline finishes. Poll GET .../orders/ORDER_ID/, or listen for the vi_profile_completed real-time event.
Unlike the map products, a completed VI Profile does not trigger a persisted in-app or email notification — only the real-time event. If your integration relies on notifications rather than events or polling, you won't hear about it finishing.
Step 3: Retrieve the profile — and keep retrieving it
curl https://backend.spacenus.de/api/v1.2/profiles/vegetation-index-profile/orders/ORDER_ID/ \
-H "Authorization: Bearer YOUR_TOKEN"{
"status": "success",
"message": "Request successful.",
"data": {
"order_id": "ORDER_ID",
"status": "active",
"index_code": "NDVI",
"start_date": "2026-03-01",
"end_date": "2026-09-30",
"profile": [
{"date": "2026-03-05", "value": 0.31},
{"date": "2026-03-20", "value": 0.44},
{"date": "2026-04-04", "value": 0.58}
]
}
}profile is the growing time series. This is the key part: the system refreshes the data for you automatically. Every time you retrieve the profile, if the stored data is more than a day old and the season hasn't ended yet, a background refresh kicks off before you're likely to check again.
How to stay updated, in practice: just retrieve the same
order_idagain whenever you want the latest data — daily, weekly, whatever cadence fits your use case. You never need to place a new order, and you never need to manage the refresh yourself. If you retrieve immediately after a refresh was triggered, you may briefly see the previous data while the refresh catches up in the background — that's expected, not a bug.
Once the season's end_date has passed, the profile stops refreshing — at that point profile reflects the complete, final season history.
Recommended pattern for continuous tracking
- Create the profile once, at the start of the season (Step 1).
- On whatever schedule fits your use case (e.g. a daily cron job, or on-demand when a user opens a dashboard), call
GET .../orders/ORDER_ID/again. - Read the latest
profilearray — no re-creation, no re-authentication of a new order, just the same retrieve call each time.
Updated 24 days ago
