API Reference

Geodocs Public API

REST API with Personal Access Token (PAT) authentication for GIS project automation.

API:https://api.geodocs.io
Geo-API:https://geo-api.geodocs.io

Authentication

All requests require a Personal Access Token (PAT) in the Authorization header. Create tokens in Geodocs > Settings > API Tokens.

Token format: gdx_<48 hex chars>
Request header: Authorization: Bearer gdx_...
Rate limit: 100 requests/minute per token

Each token has scopes that control which endpoints it can access.

# Authenticate with PAT
curl -H "Authorization: Bearer gdx_a1b2c3..." \
https://api.geodocs.io/api/public/v1/folders

Pagination

All list endpoints support pagination with these query parameters:

pagePage number (default: 1)
limitItems per page (default: 50, max: 100)
termSearch/filter term
Response envelope
{
  "content": [{ ... }],
  "total": 142,
  "page": 1,
  "size": 50,
  "pages": 3
}

Endpoints

Folders

Scope: READ_FOLDER
GET/api/public/v1/folders
GET/api/public/v1/folders/:key

Assignments

Scope: READ_ASSIGNMENT
GET/api/public/v1/assignments
GET/api/public/v1/assignments/:key

Expenses

Scope: READ_EXPENSE
GET/api/public/v1/expenses
GET/api/public/v1/expenses/:key

Budgets

Scope: READ_BUDGET
GET/api/public/v1/budgets
GET/api/public/v1/budgets/:key

Statuses

Scope: No scope required
GET/api/public/v1/statuses

Webhooks

Scope: MANAGE_WEBHOOK
POST/api/public/v1/webhooks/endpoints
DELETE/api/public/v1/webhooks/endpoints/:key

Layers

geo-api
Scope: No scope required
GET/api/public/v1/layers
GET/api/public/v1/layers/:id/mvt/{z}/{x}/{y}

Geometries

geo-api
Scope: No scope required
POST/api/public/v1/geometries/geojson

Webhook Events

When subscribed, Geodocs sends HTTP POST requests to your endpoint with this payload:

Available event types
folder.createdfolder.updatedfolder.deletedfolder.archivedassignment.createdassignment.updatedassignment.deletedexpense.createdexpense.updatedexpense.deletedbudget.createdbudget.updatedbudget.deleted
Event payload
{
  "id": "delivery-uuid",
  "event": "folder.created",
  "workspaceKey": "workspace-uuid",
  "occurredAt": "2026-03-28T14:22:00Z",
  "data": { "id": "entity-uuid", ... }
}
Signature verification

Each delivery includes an X-Geodocs-Signature header. Verify it using HMAC-SHA256:

// Node.js
const crypto = require('crypto');
const expected = crypto
  .createHmac('sha256', secret)
  .update(rawBody)
  .digest('hex');
const received = header
  .replace('sha256=', '');
const valid = crypto
  .timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(received));

Error Handling

All endpoints return standard HTTP status codes:

200OK
204No Content (DELETE)
400Bad Request
401Unauthorized
403Forbidden (missing scope)
404Not Found
429Too Many Requests
500Internal Server Error
Error response format
{
  "statusCode": 403,
  "message": "Token missing required scope: READ_FOLDER",
  "error": "Forbidden"
}

Ready to integrate?

Create your free account and generate an API token to get started.