{"openapi":"3.0.1","x-mcp":{"enabled":true},"info":{"title":"API V1","version":"v1"},"paths":{"/api/v1/devices":{"get":{"summary":"List Devices","tags":["Devices"],"description":"Returns a paginated list of devices for the current project","security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","description":"Number of items per page (default: 20, max: 100)","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","inactive"]},"description":"Filter devices by status","required":false}],"responses":{"200":{"description":"success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"platform":{"type":"string","enum":["ios","android"]},"metadata":{"type":"object"},"identifiers":{"type":"object"},"id":{"type":"string"},"status":{"type":"string","enum":["active","inactive"]}}}},"pagination":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"pages":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"},"last":{"type":"integer"}}}}}}}},"401":{"description":"unauthorized"}}}},"/api/v1/metadata":{"patch":{"summary":"Update Device Metadata","tags":["Metadata"],"description":"Updates device metadata","parameters":[{"name":"project_id","in":"query","required":true,"description":"Project ID","schema":{"type":"string"}},{"name":"identifier","in":"query","required":true,"description":"Device identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"success"},"400":{"description":"bad request"},"404":{"description":"not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Device metadata as key-value pairs"}},"required":["metadata"]}}},"required":true,"description":"Device metadata"}}},"/api/v1/notifications":{"post":{"summary":"Send Notification","tags":["Notifications"],"description":"Send a notification to the specified targets","security":[{"bearer":[]}],"parameters":[],"responses":{"201":{"description":"created"},"422":{"description":"unprocessable entity","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}}}}}}},"401":{"description":"unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notification":{"type":"object","required":["title","body","targets"],"properties":{"title":{"type":"string","description":"Notification title"},"body":{"type":"string","description":"Notification body"},"link_to":{"type":"string","description":"Link to in-app page"},"targets":{"type":"array","items":{"oneOf":[{"type":"string","description":"Topic/Device ID or device token"},{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs to match device metadata"}}}]},"description":"Array of targets: IDs, device tokens, or metadata filters"}}}},"required":["notification"]}}},"required":true,"description":"Notification details"}}},"/api/v1/topics":{"get":{"summary":"List Topics","tags":["Topics"],"description":"Returns a paginated list of topics for the current project","security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","description":"Number of items per page (default: 20, max: 100)","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"}}}},"pagination":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"pages":{"type":"integer"},"from":{"type":"integer"},"to":{"type":"integer"},"last":{"type":"integer"}}}}}}}},"401":{"description":"unauthorized"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"API key"}}},"servers":[{"url":"https://app.pnta.io","variables":{"defaultHost":{"default":"app.pnta.io"}}}]}