Sync Repo-docs-09-api-contract from project files
128
Repo-docs-09-api-contract.-.md
Normal file
128
Repo-docs-09-api-contract.-.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<!-- codex-wiki-sync:b63a15059b086d710d0dfc84 -->
|
||||||
|
|
||||||
|
> Mirrored from `/mnt/DATA/git/pikebacker/docs/09_api_contract.md`.
|
||||||
|
> Origin: `repository`.
|
||||||
|
> Active tasks and changing state belong in Gitea issues; this wiki page is durable project context.
|
||||||
|
|
||||||
|
---
|
||||||
|
# API Contract
|
||||||
|
|
||||||
|
The machine-readable OpenAPI draft is in `schemas/openapi.yaml`.
|
||||||
|
|
||||||
|
## Core endpoints
|
||||||
|
|
||||||
|
### Create trip
|
||||||
|
|
||||||
|
`POST /v1/trips`
|
||||||
|
|
||||||
|
Creates a trip shell from user inputs.
|
||||||
|
|
||||||
|
### Plan route
|
||||||
|
|
||||||
|
`POST /v1/routes/plan`
|
||||||
|
|
||||||
|
Input:
|
||||||
|
|
||||||
|
- start/end/imported GPX,
|
||||||
|
- profile,
|
||||||
|
- constraints,
|
||||||
|
- preferred providers.
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
- route id,
|
||||||
|
- geometry,
|
||||||
|
- distance/elevation,
|
||||||
|
- scores,
|
||||||
|
- warnings,
|
||||||
|
- candidate alternatives.
|
||||||
|
|
||||||
|
### Plan stages
|
||||||
|
|
||||||
|
`POST /v1/stages/plan`
|
||||||
|
|
||||||
|
Input:
|
||||||
|
|
||||||
|
- route id,
|
||||||
|
- day count/date range,
|
||||||
|
- daily constraints,
|
||||||
|
- sleep preferences.
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
- stage cards,
|
||||||
|
- Plan A/B endpoints,
|
||||||
|
- sleep/food/water/repair/bailout candidates,
|
||||||
|
- stage warnings.
|
||||||
|
|
||||||
|
### Corridor POIs
|
||||||
|
|
||||||
|
`GET /v1/routes/{route_id}/pois?category=water&buffer_km=5`
|
||||||
|
|
||||||
|
Returns route-relevant POIs with distance along route, detour distance, confidence, and source.
|
||||||
|
|
||||||
|
### Critical gaps
|
||||||
|
|
||||||
|
`GET /v1/routes/{route_id}/gaps`
|
||||||
|
|
||||||
|
Returns computed gaps for water, food, sleep, repair, bailout, and charging.
|
||||||
|
|
||||||
|
### Rule cards
|
||||||
|
|
||||||
|
`GET /v1/rules?bbox=minLon,minLat,maxLon,maxLat&route_id=...`
|
||||||
|
|
||||||
|
Returns route- or area-specific advisory cards.
|
||||||
|
|
||||||
|
### Offline pack
|
||||||
|
|
||||||
|
`POST /v1/offline-packs`
|
||||||
|
|
||||||
|
Generates a manifest and download URLs for cached trip data.
|
||||||
|
|
||||||
|
### Export
|
||||||
|
|
||||||
|
`GET /v1/routes/{route_id}/export?format=gpx`
|
||||||
|
|
||||||
|
MVP: GPX. Later: TCX and FIT.
|
||||||
|
|
||||||
|
### Local report
|
||||||
|
|
||||||
|
`POST /v1/reports`
|
||||||
|
|
||||||
|
Submits a dated, location-bound structured report. The MVP response includes `moderationStatus`, `trustScore`, and `queuedOffline` when an offline client id is supplied.
|
||||||
|
|
||||||
|
### Report sync
|
||||||
|
|
||||||
|
`POST /v1/reports/sync`
|
||||||
|
|
||||||
|
Future endpoint. The current MVP queues reports client-side while offline and resubmits them through `POST /v1/reports`.
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
|
||||||
|
Errors should include:
|
||||||
|
|
||||||
|
- machine-readable code,
|
||||||
|
- human-readable message,
|
||||||
|
- remediation suggestion,
|
||||||
|
- provider/source if relevant.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": "PROVIDER_UNAVAILABLE",
|
||||||
|
"message": "routing provider \"openrouteservice\" is not available in this MVP runtime. Set ROUTING_PROVIDER=mock for fixture mode or configure the selected provider adapter and credentials.",
|
||||||
|
"details": {
|
||||||
|
"providerName": "openrouteservice",
|
||||||
|
"providerType": "routing",
|
||||||
|
"setupHint": "Set ROUTING_PROVIDER=mock for fixture mode or configure the selected provider adapter and credentials."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Current MVP notes
|
||||||
|
|
||||||
|
- `schemas/openapi.yaml` reflects implemented response fields including route segments, surface breakdown, attribution, stage POI buckets, offline manifest metadata, and report queue ids.
|
||||||
|
- `format=gpx` is implemented. TCX/FIT are reserved for future `DeviceExportProvider` adapters.
|
||||||
|
- Mock providers are deterministic and require no external keys.
|
||||||
|
- Rule cards and access/protected-area warnings are advisory and confidence-scored.
|
||||||
Reference in New Issue
Block a user