{"openapi":"3.1.0","info":{"title":"Breachtide JSON API","version":"2.0.0","description":"Read-only access to the breach intelligence Breachtide collects on the email addresses you have verified on your account. Authenticated with a per-account Bearer token issued from /dashboard/settings.","contact":{"name":"Breachtide","url":"https://breachtide.com/docs/api"}},"servers":[{"url":"https://breachtide.com/api/v1","description":"Production"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque","description":"Personal API token issued from /dashboard/settings. Format: bt_ak_<token>."}},"schemas":{"Plan":{"type":"string","enum":["free","personal","pro","business"],"description":"The active subscription tier for the authenticated user."},"Source":{"type":"string","enum":["archive","combolist","index","enriched"],"description":"One of four breach intelligence feeds: archive (historical breach corpora), combolist (live credential combolists), index (continuously refreshed public breach index), enriched (field-level breach detail on confirmed hits)."},"Field":{"type":"string","enum":["password","hash","username","name","dob","address","phone","ip"],"description":"A category of value found alongside the address."},"Me":{"type":"object","required":["id","email","plan"],"properties":{"id":{"type":"string","description":"Internal user id."},"email":{"type":"string","format":"email"},"plan":{"$ref":"#/components/schemas/Plan"}},"example":{"id":"u_01HW8N5XYZABCDEF","email":"alice@example.com","plan":"pro"}},"BreachSourceState":{"type":"object","required":["source","breach_count","source_dbs","fields_exposed","has_plaintext_password","last_scanned_at","last_changed_at"],"properties":{"source":{"$ref":"#/components/schemas/Source"},"breach_count":{"type":"integer","minimum":0},"source_dbs":{"type":"array","items":{"type":"string"}},"fields_exposed":{"type":"array","items":{"$ref":"#/components/schemas/Field"}},"has_plaintext_password":{"type":"boolean"},"last_scanned_at":{"type":"string","format":"date-time"},"last_changed_at":{"type":"string","format":"date-time"}}},"Breaches":{"type":"object","required":["email","sources"],"properties":{"email":{"type":"string","format":"email"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/BreachSourceState"}}},"example":{"email":"alice@example.com","sources":[{"source":"archive","breach_count":3,"source_dbs":["LinkedIn2016","Dropbox2012","MyFitnessPal2018"],"fields_exposed":["password","username"],"has_plaintext_password":true,"last_scanned_at":"2026-05-08T11:42:18.000Z","last_changed_at":"2026-04-30T03:11:02.000Z"},{"source":"enriched","breach_count":1,"source_dbs":["combolist.2026-04"],"fields_exposed":["password"],"has_plaintext_password":true,"last_scanned_at":"2026-05-08T11:42:18.000Z","last_changed_at":"2026-05-02T17:08:44.000Z"}]}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"security":[{"bearerAuth":[]}],"paths":{"/me":{"get":{"summary":"Identity check","description":"Identity check. Returns the authenticated user, the email on file, and the active plan.","operationId":"getMe","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"},"example":{"id":"u_01HW8N5XYZABCDEF","email":"alice@example.com","plan":"pro"}}}},"401":{"description":"Missing or invalid Bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/breaches":{"get":{"summary":"Per-source scan state for one monitored address","description":"Returns the per-source scan state for one monitored email address you own. The address must already be added and verified on your account; unverified or unknown addresses are rejected before any data is returned.","operationId":"getBreaches","parameters":[{"name":"email","in":"query","required":true,"description":"The monitored email address to look up.","schema":{"type":"string","format":"email"},"example":"alice@example.com"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Breaches"},"example":{"email":"alice@example.com","sources":[{"source":"archive","breach_count":3,"source_dbs":["LinkedIn2016","Dropbox2012","MyFitnessPal2018"],"fields_exposed":["password","username"],"has_plaintext_password":true,"last_scanned_at":"2026-05-08T11:42:18.000Z","last_changed_at":"2026-04-30T03:11:02.000Z"},{"source":"enriched","breach_count":1,"source_dbs":["combolist.2026-04"],"fields_exposed":["password"],"has_plaintext_password":true,"last_scanned_at":"2026-05-08T11:42:18.000Z","last_changed_at":"2026-05-02T17:08:44.000Z"}]}}}},"400":{"description":"The email query parameter is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The address is on this account but has not been verified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The address is not monitored by this account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}