{"openapi":"3.0.3","info":{"title":"SIGNS API","description":"Global sign manufacturing and smart signage infrastructure API by Barbine Worldwide. Part of the Platphorm News Network.","version":"1.0.0","contact":{"name":"Barbine Worldwide - SIGNS","email":"michael@barbineworldwide.com","url":"https://signs.barbineworldwide.com/api/docs"},"license":{"name":"Proprietary","url":"https://signs.barbineworldwide.com/terms"}},"servers":[{"url":"https://signs.barbineworldwide.com/api/v1","description":"Production"},{"url":"https://staging.signs.barbineworldwide.com/api/v1","description":"Staging"}],"tags":[{"name":"Health","description":"System health and status endpoints"},{"name":"Displays","description":"Display management and content control"},{"name":"Content","description":"Content management and scheduling"},{"name":"Webhooks","description":"Webhook configuration and delivery"},{"name":"Analytics","description":"Display and content analytics"}],"paths":{"/health":{"get":{"tags":["Health"],"summary":"Health check","description":"Returns the health status of the API and its dependencies","operationId":"getHealth","responses":{"200":{"description":"System is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheck"}}}},"503":{"description":"System is unhealthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheck"}}}}}}},"/displays":{"get":{"tags":["Displays"],"summary":"List displays","description":"Returns a paginated list of displays","operationId":"listDisplays","security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/tenant_id"}],"responses":{"200":{"description":"List of displays","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Display"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}}}},"post":{"tags":["Displays"],"summary":"Create display","description":"Registers a new display in the system","operationId":"createDisplay","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDisplayRequest"}}}},"responses":{"201":{"description":"Display created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Display"}}}}}}},"/displays/{display_id}":{"get":{"tags":["Displays"],"summary":"Get display","operationId":"getDisplay","security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/display_id"}],"responses":{"200":{"description":"Display details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Display"}}}}}},"patch":{"tags":["Displays"],"summary":"Update display","operationId":"updateDisplay","security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/display_id"},{"$ref":"#/components/parameters/idempotency_key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDisplayRequest"}}}},"responses":{"200":{"description":"Display updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Display"}}}}}}},"/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhook endpoints","operationId":"listWebhooks","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"List of webhook endpoints","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}}}},"post":{"tags":["Webhooks"],"summary":"Create webhook endpoint","operationId":"createWebhook","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"201":{"description":"Webhook endpoint created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}},"/events":{"get":{"tags":["Analytics"],"summary":"List events","description":"Returns a list of system events (outbox pattern)","operationId":"listEvents","security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"},{"name":"type","in":"query","schema":{"type":"string"},"description":"Filter by event type"}],"responses":{"200":{"description":"List of events","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key prefixed with sk_live_ or sk_test_"}},"parameters":{"limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Number of items to return"},"cursor":{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Pagination cursor"},"tenant_id":{"name":"tenant_id","in":"query","schema":{"type":"string"},"description":"Filter by tenant"},"display_id":{"name":"display_id","in":"path","required":true,"schema":{"type":"string"},"description":"Display ID (dsp_ prefix)"},"idempotency_key":{"name":"Idempotency-Key","in":"header","schema":{"type":"string"},"description":"Unique request identifier for idempotent operations"}},"schemas":{"HealthCheck":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"]},"timestamp":{"type":"string","format":"date-time"},"version":{"type":"string"},"uptime":{"type":"integer"},"checks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["pass","fail","warn"]},"latency_ms":{"type":"integer"},"message":{"type":"string"}}}}}},"Display":{"type":"object","properties":{"id":{"type":"string","example":"dsp_abc123"},"tenant_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["split-flap","led","lcd","e-ink"]},"status":{"type":"string","enum":["online","offline","maintenance"]},"location":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"address":{"type":"string"}}},"content":{"$ref":"#/components/schemas/DisplayContent"},"metadata":{"type":"object"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"DisplayContent":{"type":"object","properties":{"type":{"type":"string","enum":["text","image","video","schedule"]},"message":{"type":"string"},"animation":{"type":"string","enum":["none","split-flap","fade","scroll"]},"duration_ms":{"type":"integer"}}},"CreateDisplayRequest":{"type":"object","required":["name","type"],"properties":{"name":{"type":"string"},"type":{"type":"string","enum":["split-flap","led","lcd","e-ink"]},"location":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"address":{"type":"string"}}},"metadata":{"type":"object"}}},"UpdateDisplayRequest":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["online","offline","maintenance"]},"content":{"$ref":"#/components/schemas/DisplayContent"},"metadata":{"type":"object"}}},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","example":"wh_abc123"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"secret":{"type":"string"},"status":{"type":"string","enum":["active","disabled"]},"created_at":{"type":"string","format":"date-time"}}},"CreateWebhookRequest":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"},"example":["display.updated","display.offline","content.changed"]}}},"Event":{"type":"object","properties":{"id":{"type":"string","example":"evt_abc123"},"type":{"type":"string","example":"display.updated"},"tenant_id":{"type":"string"},"data":{"type":"object"},"created_at":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"has_more":{"type":"boolean"},"next_cursor":{"type":"string"},"total":{"type":"integer"}}}}}}