{"openapi":"3.1.0","info":{"title":"Jylus Events API","version":"1.0.0","description":"Secure event ingestion for Jylus workspaces."},"servers":[{"url":"/api"}],"paths":{"/v1/events":{"post":{"summary":"Ingest one or more events","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stream","events"],"properties":{"stream":{"type":"string","example":"telemetry"},"site_id":{"type":"string","example":"HIVE_A0C009FCED40"},"source_id":{"type":"string","example":"edge-node-01"},"events":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["id","type","occurred_at","data"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"occurred_at":{"type":"string","format":"date-time"},"data":{"type":"object","additionalProperties":true}}}}}}}}},"responses":{"202":{"description":"Accepted"},"400":{"description":"Validation failed"},"401":{"description":"Invalid API key"},"403":{"description":"Missing scope"},"429":{"description":"Rate limit exceeded"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}