Save where this run's tracts sit
const url = 'https://example.com/v1/runs/example/placements?document=';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"tracts":[{"lat":36.0726,"lon":-80.2442,"rotation_deg":0,"tract_index":0}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url 'https://example.com/v1/runs/example/placements?document=' \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "tracts": [ { "lat": 36.0726, "lon": -80.2442, "rotation_deg": 0, "tract_index": 0 } ] }'Replace the positions named, and leave the rest alone.
Placing a tract again moves it: the second click corrects the first rather than adding to a list of places the parcel has been. Tracts left out of the body keep whatever they had, so a surface can save the one parcel somebody just placed.
The document name is checked against the run rather than trusted. A name the reference does not cover is a 404, because a position filed under a document that does not exist would be saved where nothing will look for it.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Which document of the run, required when the reference is a batch. A single extraction has one document and needs no name.
Which document of the run, required when the reference is a batch. A single extraction has one document and needs no name.
Request Bodyrequired
Section titled “Request Bodyrequired”Where the operator put each tract of one run.
Sent by whichever surface did the placing, and read back by the other. A
tract left out of tracts keeps whatever position it already had, so a
surface may save the one parcel somebody just placed without asserting
anything about the other four in the deed.
This is not part of the attested extraction and is never folded into it. The signature covers claims the service made and can defend; where a parcel sits on the earth is the operator’s claim, and nothing verified it.
object
One entry per tract placed, indexed as the extraction indexes them.
One tract’s position on the earth, as both the wire and the table carry it.
The bounds are the point of the model. A longitude of 200 is not a place, and a rotation of 4,000 degrees is a client that forgot to take a modulus, so both are refused at the edge rather than stored and puzzled over later.
object
The document this tract came from.
Which tract of the document, by its index.
WGS 84 longitude of the point of beginning.
WGS 84 latitude of the point of beginning.
Clockwise from north, as the placement tool reports it.
Responses
Section titled “Responses”Successful Response
Every position this run has, in tract order.
Empty means the run exists and nothing has been placed yet, which is the same answer a run whose tracts were never put on a map should give.
object
One tract’s position on the earth, as both the wire and the table carry it.
The bounds are the point of the model. A longitude of 200 is not a place, and a rotation of 4,000 degrees is a client that forgot to take a modulus, so both are refused at the edge rather than stored and puzzled over later.
object
The document this tract came from.
Which tract of the document, by its index.
WGS 84 longitude of the point of beginning.
WGS 84 latitude of the point of beginning.
Clockwise from north, as the placement tool reports it.
Example
{ "placements": [ { "lat": 36.0726, "lon": -80.2442, "rotation_deg": 0, "tract_index": 0 } ], "reference": "job_1a2b3c"}Missing, unknown, or revoked API key
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}No such resource under this caller
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}Body was empty, or was not a PDF, TIFF, PNG, or JPEG
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}Extraction temporarily unavailable
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}