API Overview
Base URL: https://api.syndb.xyz/v1
Interactive OpenAPI documentation: api.syndb.xyz/docs
OpenAPI spec: GET /openapi.json
This page is a curated route map for the current public surface. The generated OpenAPI document is the authoritative exhaustive reference.
Authentication
Pass a PASETO access token in the Authorization header:
Authorization: Bearer <access_token>
See Authentication for how to obtain tokens.
Content Types
- Requests:
application/json - Responses:
application/json(API), Apache Arrow IPC (job results), BibTeX/RIS (citations)
Error Format
{
"error": "Human-readable error message"
}
Standard HTTP status codes: 400 (bad request), 401 (unauthenticated), 403 (insufficient permissions), 404 (not found), 409 (conflict), 429 (rate limited).
Route Map
Public routes
GET /health— service health checkPOST /v1/user/auth/registerPOST /v1/user/auth/loginPOST /v1/user/auth/register-servicePOST /v1/user/auth/refreshPOST /v1/user/auth/logoutGET /v1/search/fulltextGET /v1/federation/pingPOST /v1/federation/registerGET /v1/ontology/vocabulariesGET /v1/ontology/termsGET /v1/ontology/terms/{id}GET /v1/ontology/terms/{id}/childrenGET /v1/ontology/terms/{id}/ancestorsPOST /v1/ontology/terms/validate
Authenticated user routes
GET /v1/user/profilePATCH /v1/user/profilePOST /v1/user/profile/scientist-tagGET /v1/user/profile/{user_id}GET /v1/user/authenticate/cilogonGET /v1/user/authenticate/cilogon/authorize
Academic user routes
- Dataset metadata and assets:
POST /v1/neurodata/datasets,GET /v1/neurodata/datasets/owned,GET /v1/neurodata/datasets/modifiable,GET /v1/neurodata/datasets/incomplete,GET /v1/neurodata/datasets/{dataset_id},DELETE /v1/neurodata/datasets/{dataset_id},GET /v1/neurodata/datasets/{dataset_id}/provenance,GET /v1/neurodata/datasets/{dataset_id}/versions,GET /v1/neurodata/datasets/{dataset_id}/metadata.jsonld,GET /v1/neurodata/datasets/{dataset_id}/citation,GET /v1/neurodata/datasets/{dataset_id}/lineage,POST /v1/neurodata/datasets/{dataset_id}/lineage,POST /v1/neurodata/datasets/{dataset_id}/access/request,GET /v1/neurodata/datasets/{dataset_id}/access,GET /v1/neurodata/collections,POST /v1/neurodata/collections,GET /v1/neurodata/collections/{collection_id},DELETE /v1/neurodata/collections/{collection_id} - SyQL:
POST /v1/syql/plan,POST /v1/syql/explain,POST /v1/syql/exec,POST /v1/syql/cancel - Saved queries:
GET /v1/queries,POST /v1/queries,POST /v1/queries/from-syql,GET /v1/queries/{id},PUT /v1/queries/{id},DELETE /v1/queries/{id},POST /v1/queries/{id}/run,POST /v1/queries/{id}/refresh - Jobs:
POST /v1/jobs,POST /v1/jobs/graph,GET /v1/jobs,GET /v1/jobs/{job_id},DELETE /v1/jobs/{job_id},GET /v1/jobs/{job_id}/result,POST /v1/jobs/{job_id}/rerun - Analytics:
GET /v1/analytics/summary,GET /v1/analytics/morphometrics,GET /v1/analytics/comparison,GET /v1/analytics/graph/{dataset_id}/summary,GET /v1/analytics/graph/{dataset_id}/reciprocity,GET /v1/analytics/graph/{dataset_id}/degree-distribution - Graph:
GET /v1/graph/{dataset_id}/metrics,POST /v1/graph/{dataset_id}/motifs,POST /v1/graph/{dataset_id}/motifs/compare-synapse-types,POST /v1/graph/{dataset_id}/shortest-path,POST /v1/graph/{dataset_id}/reachability,POST /v1/graph/{dataset_id}/reachability-curve,POST /v1/graph/{dataset_id}/full-analysis,GET /v1/graph/compare - Meta-analysis:
POST /v1/meta-analysis,GET /v1/meta-analysis/atlas/compare
SuperUser routes
- Federation administration:
GET /v1/federation/status,GET /v1/federation/schema,POST /v1/federation/schema/sync,GET /v1/federation/clusters,POST /v1/federation/clusters,DELETE /v1/federation/clusters/{cluster_id},POST /v1/federation/clusters/{cluster_id}/verify,POST /v1/federation/clusters/{cluster_id}/test/connectivity,POST /v1/federation/clusters/{cluster_id}/test/schema,POST /v1/federation/clusters/{cluster_id}/test/query,GET /v1/federation/benchmarks,POST /v1/federation/benchmarks,GET /v1/federation/benchmarks/aggregate - Ontology writes:
POST /v1/ontology/terms,PUT /v1/ontology/terms/{id},DELETE /v1/ontology/terms/{id},POST /v1/ontology/import/csv
Middleware Stack
Requests pass through these layers in order:
- Request ID — UUID v7, propagated via
X-Request-ID - Tracing — structured request/response logging
- Rate limiting — per-IP token bucket (see Rate Limiting)
- Timeout — 60s default, 408 on expiry
- CORS — permissive in dev mode, restricted to
api_domainin production - Compression — automatic response compression
- Body limit — 100 MB max request body
- API version —
api-version: v1response header
Health Check
curl https://api.syndb.xyz/health
{
"status": "healthy",
"components": {
"postgres": { "status": "ok", "latency_ms": 5 },
"clickhouse": { "status": "ok", "latency_ms": 12 },
"storage": { "status": "ok", "latency_ms": 8 },
"meilisearch": { "status": "ok" }
}
}
Status is degraded if any required component fails, or if Meilisearch is
configured but unreachable. Meilisearch is still optional — when it is unset,
the health payload reports meilisearch.status = "not_configured" without
degrading the overall status.