{"openapi":"3.0.3","info":{"title":"HWireline Data Exchange","version":"1.0.0","description":"Partner telemetry API. Authenticate with `Authorization: Bearer hwx_…`. A key only sees customers, pads, and trucks in its grants. Null/blank job context is hidden. `raw_payload` is never returned. Admin UI is not on this hostname."},"servers":[{"url":"https://horizontalwireline.ai","description":"Partner HTTPS"}],"tags":[{"name":"meta","description":"Public docs (no API key)"},{"name":"signup","description":"Self-serve sample tenant"},{"name":"catalog","description":"What this key may see"},{"name":"telemetry","description":"Time-bounded truck samples"},{"name":"stream","description":"Filtered live SSE"}],"paths":{"/openapi.json":{"get":{"tags":["meta"],"summary":"OpenAPI document","security":[],"responses":{"200":{"description":"OpenAPI 3 JSON"}}}},"/llms.txt":{"get":{"tags":["meta"],"summary":"Agent-oriented usage notes","security":[],"responses":{"200":{"description":"text/plain"}}}},"/signup":{"post":{"tags":["signup"],"summary":"Mint a sample-tenant API key (shown once)","security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}}}}}},"responses":{"201":{"description":"plaintext key plus Sample catalog scope"},"400":{"description":"invalid name or email"},"409":{"description":"email already registered — use /recover"}}}},"/recover":{"post":{"tags":["signup"],"summary":"Email a one-hour recovery link (does not include the API key)","security":[],"responses":{"200":{"description":"Always ok; sends mail only if the email exists"}}}},"/recover/confirm":{"post":{"tags":["signup"],"summary":"Consume a recovery token and mint a replacement key","security":[],"responses":{"200":{"description":"plaintext key shown once"},"400":{"description":"invalid or expired token"}}}},"/v1/openapi.json":{"get":{"tags":["meta"],"summary":"OpenAPI document (alias)","security":[],"responses":{"200":{"description":"OpenAPI 3 JSON"}}}},"/v1/catalog":{"get":{"tags":["catalog"],"summary":"Customers, pads, wells, trucks in grant","responses":{"200":{"description":"Catalog scoped to this key"},"401":{"description":"Missing or invalid key"},"403":{"description":"No read privilege"}}}},"/v1/telemetry/latest":{"get":{"tags":["telemetry"],"summary":"Latest sample per truck (7-day window)","parameters":[{"name":"customer","in":"query","schema":{"type":"string"}},{"name":"pad","in":"query","schema":{"type":"string"}},{"name":"truck","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Projected rows; no raw_payload"},"401":{"description":"unauthorized"},"403":{"description":"forbidden or out-of-grant filter"}}}},"/v1/telemetry":{"get":{"tags":["telemetry"],"summary":"History. from and to are required. Max 7 days.","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"customer","in":"query","schema":{"type":"string"}},{"name":"pad","in":"query","schema":{"type":"string"}},{"name":"truck","in":"query","schema":{"type":"string"}},{"name":"resolution","in":"query","schema":{"type":"string","example":"1m"},"description":"Optional time_bucket. Depth/tension/speed include min/max."},{"name":"cursor","in":"query","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Page of samples plus cursor"},"400":{"description":"Invalid window"},"401":{"description":"unauthorized"},"403":{"description":"Need history privilege, or filter outside grant"}}}},"/v1/stream-tokens":{"post":{"tags":["stream"],"summary":"Mint a one-time EventSource token (do not put hwx_ in URLs)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"string"},"pad":{"type":"string"},"truck":{"type":"string"}}}}}},"responses":{"201":{"description":"{ token, expires_in, stream_url }"},"403":{"description":"Need live privilege"}}}},"/v1/stream":{"get":{"tags":["stream"],"summary":"SSE stream. Query token= from stream-tokens. Honor Last-Event-ID.","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"text/event-stream"},"401":{"description":"bad token"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"hwx","description":"API key issued in the Tailscale admin console. Prefix hwx_."}}},"security":[{"bearer":[]}]}