Skip to content

Planting Trees

Plant trees, fetch the total number of trees you’ve planted, and access aggregated verification evidence.

POST https://app.thegoodapi.com/plant/trees

Planting trees is this easy.

NameTypeDescription
Authorization*string<your_api_key>
NameTypeRequiredDescription
countintegerYesThe number of trees you’d like to plant
project_idstringNoTarget project ID (e.g. veritree-kenya, veritree-us, veritree-bc-kelp, samauma-brazil, arbor-michigan, veritree-haiti). Defaults to veritree-kenya.
attributionstringNoTag an order with a non-unique lookup key for filtering
metadataJSONNoTag an order with arbitrary key/value pairs
idempotency_keystringNoUse this to safely retry requests without double-planting
{
"total_planted_trees": 45,
"tree_details": [
{
"id": "i2SeocFjwNayo7PI7DpI",
"count": 1,
"fractional_count": 0,
"created_at": "2025-07-01T22:07:31.374582-04:00",
"idempotency_key": "",
"project_id": "veritree-kenya",
"project_name": "Kilifi, Kenya",
"region": "Kenya",
"cost_per_tree": 0.43,
"metadata": {
"key1": "val1",
"key2": 786
},
"attribution": "saif@thegoodapi.com"
}
],
"total_planted_trees_month": 0
}

GET https://app.thegoodapi.com/plant/trees

NameTypeDescription
Authorization*string<your_api_key>

All query parameters are optional.

NameTypeDescription
project_idstringFilter trees by project ID (e.g. veritree-kenya)
attribution_keystringFetch by attribution key
idstringFetch by Tree ID
created_atstringTrees registered after date (format: YYYY-MM-DD)
end_atstringTrees registered before date (format: YYYY-MM-DD)
metadataJSONJSON filter with AND operations
{
"total_planted_trees": 45,
"tree_details": [
{
"id": "i2SeocFjwNayo7PI7DpI",
"count": 1,
"created_at": "2025-07-02T02:07:31.374582Z",
"idempotency_key": "",
"project_id": "veritree-kenya",
"project_name": "Kilifi, Kenya",
"region": "Kenya",
"cost_per_tree": 0.43,
"metadata": {
"key1": "val1",
"key2": 786
},
"attribution": "user1@test.com"
}
]
}

GET https://app.thegoodapi.com/tree/projects

Returns all active tree planting projects with their pricing, locations, and descriptions. This endpoint is public and does not require an API key.

NameTypeDefaultDescription
localestringenLanguage code for localized titles and descriptions (en, de, es, fr, ja, nl, zh-CN).
allbooleanfalseWhen true, includes non-public / private partner projects.
{
"projects": [
{
"id": "veritree-kenya",
"provider": "veritree",
"region": "Kenya",
"cost_per_tree": 0.43,
"image_url": "https://sprout-app.thegoodapi.com/...",
"title": "Kilifi, Kenya",
"description": "With your support, we are restoring the mangrove forests in Kenya...",
"default": true,
"deprecated": false
},
{
"id": "veritree-bc-kelp",
"provider": "veritree",
"region": "Canada",
"cost_per_tree": 0.43,
"image_url": "https://sprout-app.thegoodapi.com/...",
"title": "British Columbia, Canada",
"description": "Restoring kelp forests along the Pacific coast...",
"default": false,
"deprecated": false
},
{
"id": "arbor-michigan",
"provider": "arbor",
"region": "United States",
"cost_per_tree": 1.50,
"image_url": "https://sprout-app.thegoodapi.com/...",
"title": "Michigan, United States",
"description": "Reforestation across the state of Michigan...",
"default": false,
"deprecated": false
}
]
}
Project IDProviderRegionCost / TreeStatus
veritree-kenyaVeritreeKenya$0.43Active (Default)
veritree-bc-kelpVeritreeCanada$0.43Active (Public)
arbor-michiganArbor DayUnited States$1.50Active (Public)
samauma-brazilSamaúmaBrazil$0.43Active (Partner)
veritree-usVeritreeUnited States$2.00Active (Partner)
veritree-haitiVeritreeHaiti$0.75Active (Partner)
eden-madagascarEden ProjectsMadagascar$0.43Deprecated

GET https://app.thegoodapi.com/evidence

Returns aggregated planting evidence including photos, videos, and impact metrics from verified projects.

HeaderRequiredDescription
AuthorizationYes<your_api_key>
Terminal window
curl -X GET "https://app.thegoodapi.com/evidence" \
-H "Authorization: your_api_key"
{
"summary": {
"total_trees": 1847811,
"trees_planted": 330447,
"carbon_offset_tons": 81748.316,
"area_restored_hectares": 190.37407,
"countries": [
"Brazil",
"Canada",
"Haiti",
"Indonesia",
"Kenya",
"Madagascar",
"United States"
]
},
"regions": [
{
"id": "23",
"name": "Kwale",
"country": "Kenya",
"evidence": [
{
"id": "735545",
"type": "image",
"url": "https://d38us48sb13m7f.cloudfront.net/...",
"date": "2025-09-23T14:11:17.000000Z"
}
]
}
]
}
  • Response is cached for 30 days for performance.
  • Evidence items are grouped by geographic region based on coordinates.
  • Media URLs are served via Veritree’s CDN.

GET https://app.thegoodapi.com/evidence/tree/<treeid>

Returns the specific verification timeline, status, and partner evidence for a single tree planting transaction.

NameTypeRequiredDescription
treeidstringYesThe unique ID of the tree planting (returned when planting or fetching trees)
NameTypeRequiredDescription
evidence_stagestringOptionalTest / mock parameter to simulate any milestone stage: registered, funds_distributed, or planted (or planted_and_verified). Seeded from verified Kenya planting telemetry. Only permitted for test API keys.
HeaderRequiredDescription
AuthorizationYes<your_api_key>

Fetch live verification status:

Terminal window
curl -X GET "https://app.thegoodapi.com/evidence/tree/i2SeocFjwNayo7PI7DpI" \
-H "Authorization: <your_api_key>"

Simulate completed ground verification for testing:

Terminal window
curl -X GET "https://app.thegoodapi.com/evidence/tree/i2SeocFjwNayo7PI7DpI?evidence_stage=planted" \
-H "Authorization: <your_api_key>"
{
"tree_id": "i2SeocFjwNayo7PI7DpI",
"record_id": "i2SeocFjwNayo7PI7DpI",
"impact_type": "trees",
"impact_provider": "veritree",
"status": "planted",
"provider_meta": {
"order_id": 456,
"public_id": "VO-456",
"allocation_id": 789,
"field_update_id": 12,
"planting_session_id": 12
},
"timeline": [
{
"step": 1,
"event": "registered",
"title": "Tree Registered",
"status": "completed",
"date": "2025-07-02T02:07:31.374582Z",
"timestamp": "2025-07-02T02:07:31.374582Z",
"description": "The tree was successfully registered on The Good API platform.",
"evidence": {
"tree_id": "i2SeocFjwNayo7PI7DpI",
"record_id": "i2SeocFjwNayo7PI7DpI",
"registered_at": "2025-07-02T02:07:31.374582Z",
"count": 1,
"fractional_count": 0,
"attribution": "user1@test.com"
}
},
{
"step": 2,
"event": "funds_distributed",
"title": "Funds Distributed to Veritree",
"status": "completed",
"date": "2025-07-02T03:07:31Z",
"timestamp": "2025-07-02T03:07:31Z",
"description": "Included in monthly Veritree Order #456 (VO-456).",
"evidence": {
"partner": "veritree",
"order_id": 456,
"order_public_id": "VO-456",
"tree_order_id": 456,
"tree_order_public_id": "VO-456",
"tree_amount": 1000,
"buyer_name": "The Good API"
}
},
{
"step": 3,
"event": "planted_and_verified",
"title": "Planted & Ground-Verified",
"status": "completed",
"date": "2025-07-02T05:07:31Z",
"timestamp": "2025-07-02T05:07:31Z",
"description": "Tree planting completed and ground-verified by Veritree telemetry.",
"evidence": {
"partner": "veritree",
"planting_site_name": "Site A",
"subsite_name": "Kwale Mangroves Subsite 3",
"organization_name": "Eden Reforestation",
"assessor_name": "Harrison Kazungu",
"verifier": "Veritree Ground Intelligence Platform",
"date_verified": "2025-07-03",
"session_total_planted": 500,
"species": [
"Rhizophora mucronata",
"Ceriops tagal"
],
"image_url": "https://d38us48sb13m7f.cloudfront.net/site-a-overview.jpg",
"allocation_id": 789,
"field_update_id": 12,
"planting_session_id": 12,
"latitude": "-4.174210",
"longitude": "39.460450",
"photos": [
"https://d38us48sb13m7f.cloudfront.net/planted_evidence_735545.jpg"
]
}
}
]
}

The verification process progresses chronologically through three sequential stages in the timeline array (indicated by step: 1, 2, 3):

  1. registered: Initial registry of the tree planting order on The Good API platform. Contains transaction detail counts, attribution, and record_id.
  2. funds_distributed: Pooling of funds into monthly planting batches distributed to reforestation partners (e.g. Veritree). Contains public tree order identifiers and batch volumes.
  3. planted_and_verified: Complete ground verification in the field. Includes GPS coordinates, planting site/subsite telemetry, photographic evidence geotagged at planting coordinates, verifier details, and timestamps (date and timestamp).

[!NOTE]

  • Stages that have not yet occurred will remain with a "status": "pending" indicator, and their "date", "timestamp", and "evidence" fields will be omitted from the event.
  • For multi-impact compatibility across API versions, both tree_id and canonical record_id are returned, and both legacy date and RFC3339 timestamp fields are populated on all completed milestones.
  • Response is cached for 30 days for performance.
  • Media URLs and verification photographs are served directly from verified CDNs.