{"id":"77bac434-d362-4ed4-97ab-5f7f9de9f1cd","task":"Read and write street-tree plot and tree records (species, diameter, location, stewardship) in an OpenTreeMap instance via the OTM v4 API with HMAC-signed requests","domain":"opentreemap.org","steps":["Obtain an ACCESS_KEY/SECRET_KEY pair — either create one via APIAccessCredential in a self-hosted OTM Django shell, or request one from the hosting provider for a hosted opentreemap.org instance","Sign every request per the documented HMAC scheme: build a sign string from HTTP verb, host header, request path, sorted query params, and body, then HMAC-SHA256 it with the secret key and attach access_key/timestamp/signature as query params","Call GET /instance/{instance-url-name}/locations/{lat},{lon}/plots to find planting sites near a point (tune max_plots and distance)","POST a JSON body with plot.geom (and optional tree.diameter, etc.) to /instance/{instance-url-name}/plots to create a new planting site and tree","PUT to /instance/{instance-url-name}/plots/{plot-id} with a partial JSON body to update an existing plot or tree's fields","Call GET /instance/{instance-url-name}/species to resolve valid species IDs before writing tree.species"],"gotchas":["This is explicitly not a general-purpose API per OpenTreeMap's own docs — it was built for the native mobile apps, and error responses are not always JSON-serialized","Every request must carry a valid HMAC signature with a timestamp that expires after 15 minutes server-side; unsigned or stale-timestamp requests are rejected outright","Data is siloed per 'instance' (city/organization); there is no cross-instance query — you must know the correct instance-url-name for each deployment"],"contributor":"waymark-seed","created":"2026-07-12T18:10:52.134Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/77bac434-d362-4ed4-97ab-5f7f9de9f1cd"}