{"openapi":"3.1.0","info":{"title":"Bewary API","description":"Scam intelligence for apps and AI agents: links, domains, IPs, phone numbers, SMS short codes, emails, wallets, bank accounts (IBAN), mobile apps and payment handles, each with a typed verdict, facts and reason codes. Contract: https://bewary.app/docs. Pricing: https://bewary.app/pricing.","version":"1.9.0"},"servers":[{"url":"https://api.bewary.app"}],"paths":{"/v1/domain/{host}":{"get":{"tags":["v1"],"summary":"Look up a domain","description":"Registration age, lookalike-brand technique, abused TLD, blocklist status and a verdict.\n`deep=true` also reads the page with a model (30 credits).","operationId":"lookupDomain","parameters":[{"name":"host","in":"path","required":true,"schema":{"type":"string","description":"The domain or hostname, e.g. paypal-login-secure.top. Subdomains are fine.","title":"Host"},"description":"The domain or hostname, e.g. paypal-login-secure.top. Subdomains are fine."},{"name":"deep","in":"query","required":false,"schema":{"type":"boolean","description":"Also read the page with a model (30 credits, API key required).","default":false,"title":"Deep"},"description":"Also read the page with a model (30 credits, API key required)."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1,"deep":30},"x-mcp-tool":"lookup_domain"}},"/v1/domain/{host}/related":{"get":{"tags":["v1"],"summary":"Domains related to a domain","description":"Pivots from Bewary's own data: the other domains that share an address, a /24, an ASN or name servers with\nthis one (our hourly DNS history), a certificate, a registrar and registration time, a page template or a\ntracking id. Shared infrastructure (CDNs, big hosting, parking) is shown but not pivoted on. Each relation is a\nlink with its evidence, never a merge. 5 credits a page; API key required.","operationId":"relatedDomains","parameters":[{"name":"host","in":"path","required":true,"schema":{"type":"string","description":"The domain or hostname, e.g. paypal-login-secure.top.","title":"Host"},"description":"The domain or hostname, e.g. paypal-login-secure.top."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"1 and up.","default":1,"title":"Page"},"description":"1 and up."},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Related domains a page, at most 50.","default":25,"title":"Per Page"},"description":"Related domains a page, at most 50."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The domain's own values (pivots), and the other domains that share one, each relation typed with its strength and when it was observed, each domain with its own verdict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":5},"x-mcp-tool":"related_domains"}},"/v1/url":{"get":{"tags":["v1"],"summary":"Look up a link","description":"Where the link really goes (shorteners and open redirects resolved), its host's facts,\nthreat-intelligence hits and a verdict. On a shortener, `short_link` says what the shortener itself answers\n(active, disabled for abuse, a warning page, removed, not found), read from the shortener and never from the\ndestination, and the destination is looked up as a link of its own. `deep=true` reads the destination page\n(30 credits).","operationId":"lookupUrl","parameters":[{"name":"u","in":"query","required":true,"schema":{"type":"string","maxLength":4000,"description":"The full URL, URL-encoded. Shorteners are followed.","title":"U"},"description":"The full URL, URL-encoded. Shorteners are followed."},{"name":"deep","in":"query","required":false,"schema":{"type":"boolean","description":"Also read the destination page with a model (30 credits, API key required).","default":false,"title":"Deep"},"description":"Also read the destination page with a model (30 credits, API key required)."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1,"deep":30},"x-mcp-tool":"lookup_url"}},"/v1/ip/{ip}":{"get":{"tags":["v1"],"summary":"Look up an IP address","description":"Network owner (ASN), country, hosting type and reverse DNS.","operationId":"lookupIp","parameters":[{"name":"ip","in":"path","required":true,"schema":{"type":"string","description":"An IPv4 or IPv6 address.","title":"Ip"},"description":"An IPv4 or IPv6 address."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_ip"}},"/v1/phone/{number}":{"get":{"tags":["v1"],"summary":"Look up a phone number","description":"Country and number type from the numbering plan, blocklist status and a verdict.\n`line_type=true` adds the live line type (mobile/landline/VoIP), 10 credits, API key only.","operationId":"lookupPhone","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","description":"The number in E.164 form, e.g. +18008291040. A national number needs region.","title":"Number"},"description":"The number in E.164 form, e.g. +18008291040. A national number needs region."},{"name":"line_type","in":"query","required":false,"schema":{"type":"boolean","description":"Add the live line type: mobile, landline or VoIP (10 credits, API key required).","default":false,"title":"Line Type"},"description":"Add the live line type: mobile, landline or VoIP (10 credits, API key required)."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"ISO country code for reading a national number, e.g. US.","title":"Region"},"description":"ISO country code for reading a national number, e.g. US."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1,"phone_line_type":10},"x-mcp-tool":"lookup_phone"}},"/v1/shortcode/{country}/{code}":{"get":{"tags":["v1"],"summary":"Look up an SMS short code","description":"Who operates a short code, and whether it is legitimate, shared or a scam code.","operationId":"lookupShortcode","parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","description":"ISO country code. US only for now.","title":"Country"},"description":"ISO country code. US only for now."},{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"The 5 or 6 digit short code.","title":"Code"},"description":"The 5 or 6 digit short code."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_shortcode"}},"/v1/email/{address}":{"get":{"tags":["v1"],"summary":"Look up an email address","description":"Mail server, disposable provider, free provider, role mailbox, and the domain's facts.","operationId":"lookupEmail","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","description":"The email address, URL-encoded.","title":"Address"},"description":"The email address, URL-encoded."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_email"}},"/v1/wallet/{chain}/{address}":{"get":{"tags":["v1"],"summary":"Look up a crypto wallet","description":"Whether a wallet address is on Bewary's scam list.","operationId":"lookupWallet","parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","description":"btc, eth (any EVM address), trx, ltc, sol, xmr or dash.","title":"Chain"},"description":"btc, eth (any EVM address), trx, ltc, sol, xmr or dash."},{"name":"address","in":"path","required":true,"schema":{"type":"string","description":"The wallet address.","title":"Address"},"description":"The wallet address."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_wallet"}},"/v1/iban/{iban}":{"get":{"tags":["v1"],"summary":"Look up an IBAN","description":"Is this a valid IBAN (ISO 13616: the country's length and structure, the check digits), its print form,\ncountry, bank and branch codes, the bank it belongs to (name, BIC) where we hold the country's bank-code list,\nand whether a community report named the account. About the account number and its bank, never the holder.","operationId":"lookupIban","parameters":[{"name":"iban","in":"path","required":true,"schema":{"type":"string","maxLength":64,"description":"The IBAN in the electronic form (DE89370400440532013000) or the print form with spaces, URL-encoded.","title":"Iban"},"description":"The IBAN in the electronic form (DE89370400440532013000) or the print form with spaces, URL-encoded."},{"name":"claimed_country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]{2}$"},{"type":"null"}],"description":"The country the payee or the invoice claims, ISO 3166-1 alpha-2, e.g. DE. A valid IBAN from another country then carries IBAN_COUNTRY_MISMATCH.","title":"Claimed Country"},"description":"The country the payee or the invoice claims, ISO 3166-1 alpha-2, e.g. DE. A valid IBAN from another country then carries IBAN_COUNTRY_MISMATCH."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_iban"}},"/v1/app/{store}/{app_id}":{"get":{"tags":["v1"],"summary":"Look up a mobile app","description":"Whether the app is live on its store or the store pulled it (we saw it live before and it is gone now), with\nour first and last live sightings, its name, developer and rating count as the store shows them.","operationId":"lookupApp","parameters":[{"name":"store","in":"path","required":true,"schema":{"type":"string","description":"apple (the App Store) or google_play.","title":"Store"},"description":"apple (the App Store) or google_play."},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","maxLength":255,"description":"Apple: the numeric App Store id, e.g. 284882215 or id284882215. Google Play: the package name, e.g. com.whatsapp.","title":"App Id"},"description":"Apple: the numeric App Store id, e.g. 284882215 or id284882215. Google Play: the package name, e.g. com.whatsapp."},{"name":"storefront","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]{2}$"},{"type":"null"}],"description":"Apple only: the App Store country to read, ISO 3166-1 alpha-2. Default: where we last saw the app live, else US.","title":"Storefront"},"description":"Apple only: the App Store country to read, ISO 3166-1 alpha-2. Default: where we last saw the app live, else US."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_app"}},"/v1/payment-handle/{provider}/{handle}":{"get":{"tags":["v1"],"summary":"Look up a payment handle","description":"Whether the handle exists and is active, read from the service's public profile page, and whether\nBewary's scam list names it. Existence and status only: never the name, photo or anything else on the page.","operationId":"lookupPaymentHandle","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","description":"cashapp, paypal (PayPal.me) or venmo.","title":"Provider"},"description":"cashapp, paypal (PayPal.me) or venmo."},{"name":"handle","in":"path","required":true,"schema":{"type":"string","description":"The $Cashtag, PayPal.me name or Venmo username, e.g. $examplestore.","title":"Handle"},"description":"The $Cashtag, PayPal.me name or Venmo username, e.g. $examplestore."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The verdict, its probability, every entity with typed facts, and reason codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1},"x-mcp-tool":"lookup_payment_handle"}},"/v1/batch":{"post":{"tags":["v1"],"summary":"Look up many values at once","description":"Up to 1,000 lookups in one call, 1 credit each. Invalid items get an error entry and cost\nnothing; results keep the order of `items`. API key required.","operationId":"batchLookup","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchIn"}}}},"responses":{"200":{"description":"One result per item, in order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1}}},"/v1/assess":{"post":{"tags":["v1"],"summary":"Assess a seller's or profile's contact points","description":"The contact points a new seller, host or profile gives a marketplace or dating platform (website, email,\nphone, other links, payout wallet), each looked up as its lookup endpoint would, in one call: a decision (deny,\nreview, pass) that follows the fields' verdicts and every reason with the JSON pointer of its field. 1 credit per\nvalid field. Free text is not an input.","operationId":"assessAccount","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessIn"}}}},"responses":{"200":{"description":"One decision, reasons pointing at request fields, every field's lookup.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-credits":{"base":1}}},"/v1/keys":{"post":{"tags":["v1"],"summary":"Create an API key (signed-in account)","operationId":"createKey","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyIn"}}}},"responses":{"200":{"description":"The new key, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreated"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["v1"],"summary":"List API keys (signed-in account)","operationId":"listKeys","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Every key on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyList"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/keys/{key_id}":{"patch":{"tags":["v1"],"summary":"Enable or disable bulk delivery on an API key (signed-in account)","operationId":"updateKey","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","description":"The key id from GET /v1/keys.","title":"Key Id"},"description":"The key id from GET /v1/keys."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyPatch"}}}},"responses":{"200":{"description":"The key after the change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInfo"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["v1"],"summary":"Revoke an API key (signed-in account)","operationId":"revokeKey","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","description":"The key id from GET /v1/keys.","title":"Key Id"},"description":"The key id from GET /v1/keys."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account":{"get":{"tags":["v1"],"summary":"Credits and recent usage","description":"Works with an API key or a signed-in session.","operationId":"getAccount","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Credits this month and the last calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/checkout":{"post":{"tags":["v1"],"summary":"Start a Stripe Checkout for a prepaid credit pack","description":"A Checkout URL for one pack (api_billing.py). The credits are added when Stripe confirms the payment.","operationId":"startCheckout","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/billing/portal":{"post":{"tags":["v1"],"summary":"Open the Stripe Customer Portal","description":"Receipts and invoices of past packs.","operationId":"openBillingPortal","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/billing/settings":{"get":{"tags":["v1"],"summary":"Auto top-up and the low-balance email (signed-in account)","operationId":"getBillingSettings","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"The settings, the saved card and the last top-up.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSettings"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["v1"],"summary":"Change auto top-up or the low-balance email (signed-in account)","description":"Auto top-up is off unless turned on here, and needs a saved card. When a call takes the balance under\n`threshold` it buys `pack` once with the saved card; it buys again only after the balance has been back at or over\nthe threshold. The low-balance email is sent the same way, once per crossing.","operationId":"updateBillingSettings","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSettingsIn"}}}},"responses":{"200":{"description":"The settings after the change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSettings"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/billing/card":{"post":{"tags":["v1"],"summary":"Save a card for auto top-up (Stripe Checkout, setup mode)","description":"A Checkout URL that saves a card; nothing is charged. The card is stored by Stripe, never by Bewary.","operationId":"saveCard","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["v1"],"summary":"Forget the saved card and turn auto top-up off","operationId":"dropCard","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/watches":{"post":{"tags":["v1"],"summary":"Watch a domain, phone number, wallet or brand","description":"Get an event when the entity changes: a domain's IP addresses, name servers, up/down/parked state,\nregistration (re-registered, expiring, expired) or listing; a number's or wallet's listing; a new lookalike of a\nbrand (EVENTS.md). 1 credit a day per watch, charged a day ahead (the first day now); a brand watch also costs\n1 credit per lookalike event. Watching an entity already watched updates its event types and charges nothing.","operationId":"createWatch","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchIn"}}}},"responses":{"200":{"description":"The watch, new or the existing one on that entity.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchCreated"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-mcp-tool":"watch"},"get":{"tags":["v1"],"summary":"List watches","description":"Every live watch on the account, active or paused. Free.","operationId":"listWatches","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Every live watch, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchList"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-mcp-tool":"list_watches"}},"/v1/watches/{watch_id}":{"get":{"tags":["v1"],"summary":"One watch and its delivery record","description":"The watch, with its events in the last 30 days, how many no webhook endpoint could take after every retry,\nand how many wait for a delivery. Free.","operationId":"getWatch","parameters":[{"name":"watch_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Watch Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The watch, its events in the last 30 days and how many could not be delivered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchDetail"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["v1"],"summary":"Stop a watch","description":"No more events or charges for it; the day already paid is not refunded. Its events stay readable.","operationId":"deleteWatch","parameters":[{"name":"watch_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Watch Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Deleted. Its events stay in GET /v1/events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-mcp-tool":"unwatch"}},"/v1/events":{"get":{"tags":["v1"],"summary":"Events of the account's watches","description":"The durable record of every event, the same objects the webhooks deliver: pull it to follow the stream\n(store next_cursor, ask again), to catch up after downtime, or instead of a webhook. Free.","operationId":"listEvents","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"next_cursor of the previous page; omitted: from the oldest event kept (13 months).","title":"Cursor"},"description":"next_cursor of the previous page; omitted: from the oldest event kept (13 months)."},{"name":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"description":"Comma-separated event types, e.g. domain.down,domain.ip_changed.","title":"Types"},"description":"Comma-separated event types, e.g. domain.down,domain.ip_changed."},{"name":"watch_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Only this watch's events.","title":"Watch Id"},"description":"Only this watch's events."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Events after the cursor, oldest first, and the cursor to continue from.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPage"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-mcp-tool":"list_events"}},"/v1/webhooks":{"post":{"tags":["v1"],"summary":"Register a webhook endpoint","description":"Every event of the account's watches (or the types named) is POSTed to the URL, signed per Standard\nWebhooks with the secret returned here, and retried with backoff for about a day. At most 5 endpoints. Free.","operationId":"createWebhook","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookIn"}}}},"responses":{"200":{"description":"The endpoint and its signing secret, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["v1"],"summary":"List webhook endpoints","operationId":"listWebhooks","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Every endpoint, without secrets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/webhooks/{webhook_id}":{"get":{"tags":["v1"],"summary":"One webhook endpoint and its last deliveries","operationId":"getWebhook","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The endpoint and its last 50 deliveries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDetail"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["v1"],"summary":"Delete a webhook endpoint","operationId":"deleteWebhook","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Deleted; its pending deliveries are cancelled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/webhooks/{webhook_id}/rotate":{"post":{"tags":["v1"],"summary":"Rotate a webhook endpoint's secret","description":"A new signing secret. For 24 hours every delivery carries two signatures, the new secret's and the old\none's, so the receiver can switch without dropping one.","operationId":"rotateWebhookSecret","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The new secret, shown once. The old one also signs for 24 hours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/webhooks/{webhook_id}/enable":{"post":{"tags":["v1"],"summary":"Turn a disabled webhook endpoint back on","operationId":"enableWebhook","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","maxLength":40,"title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Enabled. Events produced while it was disabled are in GET /v1/events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/datasets":{"get":{"tags":["v1"],"summary":"The datasets behind every answer, US or worldwide","description":"Every dataset Bewary answers from, marked US (US-only data, such as US phone complaints and\nthe US short code directory) or WW (worldwide). Each signal in an answer names its dataset, and\neach entity lists the datasets checked for it with `in_coverage`. Free.","operationId":"listDatasets","responses":{"200":{"description":"Every dataset the API answers from: its geography (US or WW), kind, the entity types it covers and, for scam lists, how many entries are active now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetList"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/calibration/site":{"get":{"tags":["v1"],"summary":"How the site score becomes a probability","description":"The calibration behind `site.p_scam_site` on /v1/domain: for each band of the domain verdict's raw score, how\nmany labelled hosts fell in it, how many were scam sites, the probability served for it and the band's 95%\ninterval. Refit as the nightly audit labels more hosts. Free.","operationId":"siteCalibration","responses":{"200":{"description":"Every score band of the domain verdict, the labelled hosts in it, how many were scam sites, the probability served and its 95% interval.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCalibration"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/directory/area-codes":{"get":{"tags":["v1"],"summary":"Area codes with reported numbers","description":"US area codes (and US territories') with at least one number reported to the FTC or the\nFCC in the last 13 months: how many numbers, complaints, numbers that pass the index rule and\nnumbers with a page (inside the current wave). Free.","operationId":"directoryAreaCodes","responses":{"200":{"description":"Every US area code with a number reported in the last 13 months, with how many numbers pass the index rule and how many are indexable (inside the current wave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaCodeIndex"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: the directory's database is unreachable; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/directory/area-code/{npa}":{"get":{"tags":["v1"],"summary":"Reported numbers in one area code","description":"Complaints about the area code's numbers over the last 13 months: totals by subject and\nsource, by month and by hour of the call, its busiest exchanges, up to 200 reported numbers\n(most reported first) and its top numbers used as callback numbers. Free.","operationId":"directoryAreaCode","parameters":[{"name":"npa","in":"path","required":true,"schema":{"type":"string","description":"The three-digit area code, e.g. 512.","title":"Npa"},"description":"The three-digit area code, e.g. 512."}],"responses":{"200":{"description":"The area code's totals, complaints by month and by hour, its busiest exchanges, its reported numbers (most reported first) and its numbers used as callback numbers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaCodePage"}}}},"404":{"description":"not_found: not a US area code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: the directory's database is unreachable; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/directory/number/{e164}":{"get":{"tags":["v1"],"summary":"A number's page: lookup, complaints, area","description":"What a number's page shows, in one call: the same answer GET /v1/phone gives an anonymous\ncaller (no paid source, never the live line type), whether the number is indexable (meets the\nindex rule and is inside the current wave), and up to 12 other reported numbers in its area\ncode. Free and not logged as API usage.","operationId":"directoryNumber","parameters":[{"name":"e164","in":"path","required":true,"schema":{"type":"string","description":"+1 and ten digits, e.g. +15125550123. Ten digits alone are read as US.","title":"E164"},"description":"+1 and ten digits, e.g. +15125550123. Ten digits alone are read as US."}],"responses":{"200":{"description":"The anonymous phone lookup, whether the number is indexable (the index rule, inside the current wave) and the area code's other reported numbers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberPage"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: the directory's database is unreachable; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/directory/numbers":{"get":{"tags":["v1"],"summary":"Numbers with a page, for sitemaps","description":"Every indexable number (meets the index rule, inside the current wave), 50,000 a page,\nordered by number, for sharded sitemaps. Free.","operationId":"directoryNumbers","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"1 and up; 50,000 numbers a page.","default":1,"title":"Page"},"description":"1 and up; 50,000 numbers a page."}],"responses":{"200":{"description":"One page of the indexable numbers (the index rule, inside the current wave), by number.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexableNumbers"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: the directory's database is unreachable; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{}]}},"/v1/backtest":{"post":{"tags":["v1"],"summary":"Backtest a list of known-bad entities","description":"Send the domains, links, phone numbers, emails and wallets you already know are bad, each with the date you\nlearned it (optional): the report says what Bewary would have answered on that date, since when we had it and\nhow many hours before you, and what we would have missed. Answered from our stored history only. Up to 10,000\nitems and 2 MB, as CSV, NDJSON or JSON. The first 1,000 items each month are free, then 1 credit each. The upload\nis deleted when the report is written; the report after 7 days.","operationId":"createBacktest","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"202":{"description":"Queued; the report is at `report`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestCreated"}}}},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"input_too_large: the upload is over the limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestIn"}},"text/csv":{"schema":{"type":"string"},"example":"type,value,reported_at\ndomain,usps-redeliver.top,2026-10-28\nphone,+18005551234,2026-10-27T14:00:00Z\n"},"application/x-ndjson":{"schema":{"type":"string"},"example":"{\"value\": \"usps-redeliver.top\", \"reported_at\": \"2026-10-28\"}\n"}}},"x-backtest":{"free_items_per_month":1000,"max_items":10000,"credits_per_item_after":1}}},"/v1/backtest/{backtest_id}":{"get":{"tags":["v1"],"summary":"A backtest's report","description":"Any key of the account that made it. Free.","operationId":"getBacktest","parameters":[{"name":"backtest_id","in":"path","required":true,"schema":{"type":"string","description":"The id POST /v1/backtest gave.","title":"Backtest Id"},"description":"The id POST /v1/backtest gave."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The status, and once done the summary and one result per item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestReport"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"not_found: there is nothing at this path","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["v1"],"summary":"Delete a backtest and its report now","operationId":"deleteBacktest","parameters":[{"name":"backtest_id","in":"path","required":true,"schema":{"type":"string","title":"Backtest Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"not_found: there is nothing at this path","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/bulk":{"get":{"tags":["v1"],"summary":"What the bulk files hold now","description":"Our verdicts as files: a CSV of domains, links, phone numbers and wallets, a DNS response policy zone (RPZ)\nof domains, and STIX 2.1 indicators of domains and links (also as a TAXII 2.1 collection at /v1/taxii2/). Rebuilt\nevery hour; full files, and deltas after any version of the last 30 days. Free with any key; the files need a\nkey enabled for bulk and a day pass.","operationId":"bulkManifest","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"The latest version, recent versions, entries by type, the formats and the price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkManifest"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/bulk/notices":{"get":{"tags":["v1"],"summary":"Licence notices that travel with the bulk files","description":"Plain text. The notices some licences ask to travel with copies of their data; every RPZ and STIX file carries\nthem too. Free.","operationId":"bulkNotices","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{}]}},"/v1/bulk/{fmt}":{"get":{"tags":["v1"],"summary":"Download a bulk file (full or delta)","description":"The latest version of a bulk file. Needs a key enabled for bulk; the day's first file buys the account's day\npass (5,000 credits), later files that day are free. Headers: X-Bulk-Version, X-Bulk-Entries, ETag.","operationId":"bulkFile","parameters":[{"name":"fmt","in":"path","required":true,"schema":{"type":"string","description":"csv, rpz or stix.","title":"Fmt"},"description":"csv, rpz or stix."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Entity types, comma separated: csv domain,url,phone,wallet; rpz domain; stix domain,url. Default: all the format carries.","title":"Type"},"description":"Entity types, comma separated: csv domain,url,phone,wallet; rpz domain; stix domain,url. Default: all the format carries."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"A version id: only what was added, changed or removed after it (csv and stix). The CSV then starts with a `change` column.","title":"Since"},"description":"A version id: only what was added, changed or removed after it (csv and stix). The CSV then starts with a `change` column."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"accept-encoding","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accept-Encoding"}}],"responses":{"200":{"description":"The file: text/csv, text/dns (an RPZ zone) or application/stix+json;version=2.1. Gzipped when the request accepts gzip."},"304":{"description":"Not modified (If-None-Match)."},"400":{"description":"invalid_input or unsupported_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"unauthorized: missing, revoked or wrong key, or an option that needs a key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"quota_exceeded: the key is out of credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"forbidden: the key is not enabled for this (bulk delivery: PATCH /v1/keys/{id})","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limited: wait for Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"degraded_unavailable: a needed source is down; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-bulk-day-credits":5000}}},"components":{"schemas":{"AccountResponse":{"properties":{"credits":{"$ref":"#/components/schemas/CreditState"},"recent":{"items":{"$ref":"#/components/schemas/UsageRow"},"type":"array","title":"Recent"}},"type":"object","required":["credits","recent"],"title":"AccountResponse"},"AppFacts":{"properties":{"store":{"anyOf":[{"type":"string","enum":["apple","google_play"]},{"type":"null"}],"title":"Store"},"app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id","description":"Apple: the numeric App Store id. Google Play: the package name (application id)."},"status":{"anyOf":[{"type":"string","enum":["live","removed","not_found","unknown"]},{"type":"null"}],"title":"Status","description":"live: the store lists it now. removed: we saw it live before and the store no longer lists it. not_found: the store has no such app and we never saw it live. unknown: the store could not be read (degraded)."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The store's title for the app (from the last live sighting)."},"developer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer","description":"The developer or seller name the store publishes (from the last live sighting)."},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","description":"How many ratings the store shows (Apple: in that storefront)."},"storefront":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storefront","description":"Apple: the App Store country read, ISO 3166-1 alpha-2."},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen","description":"The first time we saw it live, RFC 3339 UTC."},"last_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen","description":"The last time we saw it live, RFC 3339 UTC."},"missing_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Missing Since","description":"The first check that found it gone after a live sighting, RFC 3339 UTC; null while live."}},"additionalProperties":false,"type":"object","title":"AppFacts","description":"A mobile app on the Apple App Store or Google Play (task E12, added 2026-10-29)."},"ArchiveHistory":{"properties":{"checked_at":{"type":"string","title":"Checked At","description":"When we read the archive's index, RFC 3339 UTC. Kept for up to 30 days."},"captured":{"type":"boolean","title":"Captured","description":"The archive holds at least one capture of the host's homepage."},"first_capture_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Capture At","description":"The first capture, RFC 3339 UTC; null when none."},"last_capture_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Capture At","description":"The latest capture, RFC 3339 UTC; null when none."},"captured_before_registration":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Captured Before Registration","description":"The homepage was captured more than 30 days before registered_at: the name had an earlier life before this registration (it lapsed and someone registered it again). Null when either date is unknown, or for a tenant of a hosting platform."},"months_before_registration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Months Before Registration","description":"How many calendar months hold a capture before registered_at; null unless captured_before_registration."},"last_capture_before_registration_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Capture Before Registration At","description":"The last capture before registered_at, RFC 3339 UTC: the end of the earlier life."}},"additionalProperties":false,"type":"object","required":["checked_at","captured"],"title":"ArchiveHistory","description":"The site's history in a public web archive (E9): when its homepage was first and last captured, and whether\nit was captured before the current registration began (a name that lapsed and was registered again)."},"AreaCallback":{"properties":{"e164":{"type":"string","title":"E164"},"reports":{"type":"integer","title":"Reports","description":"Complaints that named it as the callback number."},"callers":{"type":"integer","title":"Callers","description":"Distinct caller IDs that pushed it."},"indexable":{"type":"boolean","title":"Indexable"}},"type":"object","required":["e164","reports","callers","indexable"],"title":"AreaCallback"},"AreaCodeIndex":{"properties":{"as_of":{"type":"string","title":"As Of","description":"RFC 3339 UTC."},"area_codes":{"items":{"$ref":"#/components/schemas/AreaCodeSummary"},"type":"array","title":"Area Codes"}},"type":"object","required":["as_of","area_codes"],"title":"AreaCodeIndex"},"AreaCodePage":{"properties":{"npa":{"type":"string","title":"Npa"},"as_of":{"type":"string","title":"As Of"},"from":{"type":"string","title":"From","description":"First day the directory has data for, YYYY-MM-DD."},"to":{"type":"string","title":"To","description":"Last day the directory has data for, YYYY-MM-DD."},"totals":{"$ref":"#/components/schemas/AreaCodeTotals"},"monthly":{"items":{"$ref":"#/components/schemas/MonthCount"},"type":"array","title":"Monthly","description":"Complaints per calendar month, the 13 months ending with the current one (partial), oldest first, months with none included."},"hours":{"additionalProperties":{"type":"integer"},"type":"object","title":"Hours","description":"Complaints by the hour of the call, \"0\" to \"23\", every hour present."},"exchanges":{"items":{"$ref":"#/components/schemas/Exchange"},"type":"array","title":"Exchanges","description":"The exchanges with the most complaints, at most 5."},"callbacks":{"items":{"$ref":"#/components/schemas/AreaCallback"},"type":"array","title":"Callbacks","description":"The area code's numbers named as callback numbers in FCC complaints, most reports first, at most 10."},"numbers":{"items":{"$ref":"#/components/schemas/DirectoryNumber"},"type":"array","title":"Numbers","description":"Most reported first: numbers with a page, then by complaints, then the latest report. At most 200."}},"type":"object","required":["npa","as_of","from","to","totals","monthly","hours","exchanges","callbacks","numbers"],"title":"AreaCodePage"},"AreaCodeSources":{"properties":{"ftc":{"type":"integer","title":"Ftc"},"fcc":{"type":"integer","title":"Fcc"}},"type":"object","required":["ftc","fcc"],"title":"AreaCodeSources"},"AreaCodeSummary":{"properties":{"npa":{"type":"string","title":"Npa"},"numbers":{"type":"integer","title":"Numbers","description":"Numbers with a complaint in the last 13 months."},"complaints":{"type":"integer","title":"Complaints"},"indexable":{"type":"integer","title":"Indexable","description":"How many of the area code's numbers have a page (inside the current wave), callback numbers included."},"qualifying":{"type":"integer","title":"Qualifying","description":"How many of the area code's numbers meet the index rule, callback numbers included."}},"type":"object","required":["npa","numbers","complaints","indexable","qualifying"],"title":"AreaCodeSummary"},"AreaCodeTotals":{"properties":{"numbers":{"type":"integer","title":"Numbers"},"complaints":{"type":"integer","title":"Complaints"},"subjects":{"additionalProperties":{"type":"integer"},"type":"object","title":"Subjects"},"sources":{"$ref":"#/components/schemas/AreaCodeSources"}},"type":"object","required":["numbers","complaints","subjects","sources"],"title":"AreaCodeTotals"},"AreaNeighbors":{"properties":{"npa":{"type":"string","title":"Npa"},"numbers":{"items":{"$ref":"#/components/schemas/DirectoryNumber"},"type":"array","title":"Numbers","description":"Other reported numbers in the area code, most reported first, at most 12."}},"type":"object","required":["npa","numbers"],"title":"AreaNeighbors"},"AssessAccount":{"properties":{"website":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Website","description":"The seller's or profile's website: URL or host."},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Phone","description":"E.164, or national with country."},"country":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]{2}$"},{"type":"null"}],"title":"Country","description":"ISO 3166-1 alpha-2: the phone's region when it has no +."},"links":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Links","description":"Other links on the profile or listing."},"wallet":{"anyOf":[{"$ref":"#/components/schemas/AssessWallet"},{"type":"null"}]}},"type":"object","title":"AssessAccount"},"AssessEvent":{"properties":{"type":{"type":"string","enum":["account.onboarding","account.update"],"title":"Type","description":"When the contact points were given (a new seller or profile) or changed."},"id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Id","description":"Yours; echoed back."}},"type":"object","required":["type"],"title":"AssessEvent"},"AssessField":{"properties":{"pointer":{"type":"string","title":"Pointer","description":"RFC 6901 JSON pointer of the request field."},"type":{"type":"string","enum":["url","email","phone","wallet"],"title":"Type"},"value":{"type":"string","title":"Value"},"verdict":{"type":"string","enum":["scam","suspicious","safe","unknown"],"title":"Verdict"},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"entities":{"items":{"$ref":"#/components/schemas/Entity"},"type":"array","title":"Entities","description":"The field's lookup answer, primary first (a website's URL, then its domain and any redirect host)."},"signals":{"items":{"$ref":"#/components/schemas/Signal"},"type":"array","title":"Signals"}},"type":"object","required":["pointer","type","value","verdict","p_scam","reason_codes","entities","signals"],"title":"AssessField"},"AssessFieldError":{"properties":{"pointer":{"type":"string","title":"Pointer"},"error":{"$ref":"#/components/schemas/ItemError"}},"type":"object","required":["pointer","error"],"title":"AssessFieldError"},"AssessIn":{"properties":{"event":{"$ref":"#/components/schemas/AssessEvent"},"account":{"$ref":"#/components/schemas/AssessAccount"}},"type":"object","required":["event","account"],"title":"AssessIn"},"AssessReason":{"properties":{"code":{"type":"string","title":"Code","description":"A stable reason code, https://bewary.app/docs/reason-codes"},"pointer":{"type":"string","title":"Pointer","description":"RFC 6901 JSON pointer of the request field it came from, e.g. /account/website or /account/links/2."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"title":"Severity"},"source_class":{"type":"string","enum":["confirmed","first_party","heuristic","model","attacker_content"],"title":"Source Class"}},"type":"object","required":["code","pointer","severity","source_class"],"title":"AssessReason"},"AssessResponse":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"request_id":{"type":"string","title":"Request Id"},"checked_at":{"type":"string","title":"Checked At","description":"RFC 3339 UTC."},"engine":{"type":"string","title":"Engine"},"models":{"$ref":"#/components/schemas/ModelsUsed"},"event":{"$ref":"#/components/schemas/AssessEvent"},"decision":{"type":"string","enum":["deny","review","pass"],"title":"Decision","description":"deny when a field's verdict is scam, review when one is suspicious, otherwise pass. It follows the field verdicts only: pass means nothing Bewary holds names these contact points, not that the account is safe."},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam","description":"The highest field's."},"reasons":{"items":{"$ref":"#/components/schemas/AssessReason"},"type":"array","title":"Reasons","description":"Every signal of severity medium or above on any field, strongest first. Cautions are listed and never change decision."},"fields":{"items":{"anyOf":[{"$ref":"#/components/schemas/AssessField"},{"$ref":"#/components/schemas/AssessFieldError"}]},"type":"array","title":"Fields","description":"In request order: website, email, phone, links, wallet."},"credits":{"type":"integer","title":"Credits","description":"Lookups charged: one per valid field."}},"type":"object","required":["schema_version","request_id","checked_at","engine","models","event","decision","p_scam","reasons","fields","credits"],"title":"AssessResponse","description":"POST /v1/assess (API-CONTRACT section 2.1, 1.3.0)."},"AssessWallet":{"properties":{"address":{"type":"string","maxLength":200,"title":"Address","description":"The payout wallet address."}},"type":"object","required":["address"],"title":"AssessWallet"},"AutoTopup":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Off by default. Needs a saved card (POST /v1/billing/card).","default":false},"pack":{"anyOf":[{"type":"string","enum":["pack_20","pack_100","pack_500","pack_2000"]},{"type":"null"}],"title":"Pack","description":"The pack bought each time."},"threshold":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Threshold","description":"Buy when a call takes the balance under this many credits. Below the pack's credits."}},"type":"object","title":"AutoTopup"},"BacktestCreated":{"properties":{"id":{"type":"string","title":"Id","description":"bt_ + a ULID."},"status":{"type":"string","enum":["queued","running","done","failed"],"title":"Status"},"items":{"type":"integer","title":"Items"},"valid":{"type":"integer","title":"Valid"},"invalid":{"type":"integer","title":"Invalid","description":"Items that are not a value of their type: reported, never charged."},"free_items":{"type":"integer","title":"Free Items","description":"Items covered by this month's free allowance."},"credits":{"type":"integer","title":"Credits","description":"Credits charged: one per valid item past the free allowance."},"report":{"type":"string","title":"Report","description":"Path of the report."}},"type":"object","required":["id","status","items","valid","invalid","free_items","credits","report"],"title":"BacktestCreated"},"BacktestItemError":{"properties":{"index":{"type":"integer","title":"Index"},"error":{"$ref":"#/components/schemas/ItemError"}},"type":"object","required":["index","error"],"title":"BacktestItemError"},"BacktestLeads":{"properties":{"caught_before":{"anyOf":[{"$ref":"#/components/schemas/LeadStats"},{"type":"null"}]},"caught_after":{"anyOf":[{"$ref":"#/components/schemas/LeadStats"},{"type":"null"}]}},"type":"object","title":"BacktestLeads"},"BacktestReport":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","enum":["queued","running","done","failed"],"title":"Status"},"created_at":{"type":"string","title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"items":{"type":"integer","title":"Items"},"valid":{"type":"integer","title":"Valid"},"free_items":{"type":"integer","title":"Free Items"},"credits":{"type":"integer","title":"Credits"},"history":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/HistoryStart"},"type":"object"},{"type":"null"}],"title":"History","description":"Where our data for each type begins."},"summary":{"anyOf":[{"$ref":"#/components/schemas/BacktestSummary"},{"type":"null"}]},"results":{"items":{"anyOf":[{"$ref":"#/components/schemas/BacktestResult"},{"$ref":"#/components/schemas/BacktestItemError"}]},"type":"array","title":"Results","description":"In upload order; empty until the report is done."}},"type":"object","required":["id","status","created_at","items","valid","free_items","credits","results"],"title":"BacktestReport","description":"GET /v1/backtest/{id}. Kept 7 days after it is ready; the upload itself is deleted when the report is\nwritten."},"BacktestResult":{"properties":{"index":{"type":"integer","title":"Index","description":"The item's position in the upload."},"type":{"type":"string","enum":["domain","url","phone","email","wallet"],"title":"Type"},"value":{"type":"string","title":"Value","description":"As uploaded."},"normalized":{"type":"string","title":"Normalized","description":"Our canonical form (the email's domain for an email)."},"reported_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reported At","description":"Your date, RFC 3339 UTC."},"outcome":{"type":"string","enum":["caught_before","caught_after","caught","flagged","missed","before_history"],"title":"Outcome","description":"caught_before: on your date we listed it. caught_after: we listed it only later. caught (no date): we listed it. flagged: only a caution or a caller-ID report. missed. before_history: your date is before our data for this type begins."},"answer_then":{"anyOf":[{"type":"string","enum":["listed","sanctioned","frozen","caution","caller_id","not_listed"]},{"type":"null"}],"title":"Answer Then","description":"What a lookup on your date answered."},"answer_now":{"type":"string","enum":["listed","sanctioned","frozen","caution","caller_id","not_listed"],"title":"Answer Now","description":"What a lookup answers now."},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen","description":"The earliest we saw it at all, a certificate included."},"first_listed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Listed","description":"When we first asserted it (listed or sanctioned)."},"lead_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lead Hours","description":"Your date minus our listing, in hours: positive when we had it first, negative when we listed it later."},"severity":{"anyOf":[{"type":"string","enum":["info","low","medium","high","critical"]},{"type":"null"}],"title":"Severity"},"reason_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Code","description":"LISTED_BLOCKLIST, WALLET_SANCTIONED, WALLET_FROZEN_BY_ISSUER (1.9.0), LISTED_CAUTION or PHONE_REPORTED_CALLER_ID."}},"type":"object","required":["index","type","value","normalized","outcome","answer_now"],"title":"BacktestResult"},"BacktestSummary":{"properties":{"items":{"type":"integer","title":"Items"},"valid":{"type":"integer","title":"Valid"},"invalid":{"type":"integer","title":"Invalid"},"outcomes":{"additionalProperties":{"type":"integer"},"type":"object","title":"Outcomes","description":"Items by outcome."},"listed_now":{"type":"integer","title":"Listed Now","description":"Items a lookup asserts now (listed or sanctioned)."},"lead_hours":{"$ref":"#/components/schemas/BacktestLeads"},"by_type":{"additionalProperties":{"$ref":"#/components/schemas/BacktestTypeSummary"},"type":"object","title":"By Type"}},"type":"object","required":["items","valid","invalid","outcomes","listed_now","lead_hours","by_type"],"title":"BacktestSummary"},"BacktestTypeSummary":{"properties":{"items":{"type":"integer","title":"Items"},"outcomes":{"additionalProperties":{"type":"integer"},"type":"object","title":"Outcomes"},"listed_now":{"type":"integer","title":"Listed Now"}},"type":"object","required":["items","outcomes","listed_now"],"title":"BacktestTypeSummary"},"BatchError":{"properties":{"error":{"$ref":"#/components/schemas/ItemError"}},"type":"object","required":["error"],"title":"BatchError"},"BatchIn":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchItem"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"BatchIn"},"BatchItem":{"properties":{"type":{"type":"string","enum":["domain","url","ip","phone","shortcode","email","wallet","iban","app","payment_handle"],"title":"Type","description":"What value is: domain, url, ip, phone, shortcode (US), email, wallet, iban, app (a store link, or apple:<id> / google_play:<package>)."},"value":{"type":"string","maxLength":4000,"title":"Value"},"claimed_country":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Claimed Country","description":"iban only: the country the payee claims, ISO 3166-1 alpha-2 (IBAN_COUNTRY_MISMATCH)."}},"type":"object","required":["type","value"],"title":"BatchItem"},"BatchResponse":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"request_id":{"type":"string","title":"Request Id"},"checked_at":{"type":"string","title":"Checked At"},"credits":{"type":"integer","title":"Credits","description":"Credits charged: one per valid item."},"results":{"items":{"anyOf":[{"$ref":"#/components/schemas/Envelope"},{"$ref":"#/components/schemas/BatchError"}]},"type":"array","title":"Results","description":"In the order of items."}},"type":"object","required":["schema_version","request_id","checked_at","credits","results"],"title":"BatchResponse"},"BillingSettings":{"properties":{"auto_topup":{"$ref":"#/components/schemas/AutoTopup"},"low_balance_email":{"$ref":"#/components/schemas/LowBalanceEmail"},"card":{"anyOf":[{"$ref":"#/components/schemas/CardInfo"},{"type":"null"}],"description":"The saved card for auto top-up, or null."},"last_top_up":{"anyOf":[{"$ref":"#/components/schemas/LastTopUp"},{"type":"null"}]}},"type":"object","required":["auto_topup","low_balance_email"],"title":"BillingSettings"},"BillingSettingsIn":{"properties":{"auto_topup":{"anyOf":[{"$ref":"#/components/schemas/AutoTopup"},{"type":"null"}]},"low_balance_email":{"anyOf":[{"$ref":"#/components/schemas/LowBalanceEmail"},{"type":"null"}]}},"type":"object","title":"BillingSettingsIn"},"Brand":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"Brand"},"BulkFormat":{"properties":{"format":{"type":"string","enum":["csv","rpz","stix"],"title":"Format"},"media_type":{"type":"string","title":"Media Type"},"types":{"items":{"type":"string","enum":["domain","url","phone","wallet"]},"type":"array","title":"Types","description":"Entity types the format carries."},"full":{"type":"string","title":"Full","description":"Path of the full file."},"delta":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delta","description":"Path of a delta after a version, or null (RPZ is served whole)."}},"type":"object","required":["format","media_type","types","full"],"title":"BulkFormat"},"BulkManifest":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"policy":{"type":"string","title":"Policy","description":"The licence policy version the entries passed (app/licences.py)."},"version":{"anyOf":[{"$ref":"#/components/schemas/BulkVersion"},{"type":"null"}],"description":"The latest version, or null before the first build."},"versions":{"items":{"$ref":"#/components/schemas/BulkVersion"},"type":"array","title":"Versions","description":"Recent versions, newest first; deltas reach back 30 days."},"types":{"additionalProperties":{"type":"integer"},"type":"object","title":"Types","description":"Current entries by entity type."},"formats":{"items":{"$ref":"#/components/schemas/BulkFormat"},"type":"array","title":"Formats"},"price":{"$ref":"#/components/schemas/BulkPrice"},"key_enabled":{"type":"boolean","title":"Key Enabled","description":"This key may download the files (PATCH /v1/keys/{id})."},"notices":{"type":"string","title":"Notices","description":"Licence notices that travel with the files."}},"type":"object","required":["schema_version","policy","versions","types","formats","price","key_enabled","notices"],"title":"BulkManifest","description":"GET /v1/bulk: what the bulk files hold now. Free with any key."},"BulkPrice":{"properties":{"credits_per_day":{"type":"integer","title":"Credits Per Day","description":"One day pass per account per UTC day covers every format, full and delta, and the TAXII collection."},"pass_today":{"type":"boolean","title":"Pass Today","description":"This account already holds today's pass."}},"type":"object","required":["credits_per_day","pass_today"],"title":"BulkPrice"},"BulkVersion":{"properties":{"id":{"type":"integer","title":"Id","description":"Increases with every change; the RPZ serial. Pass it as `since` for a delta."},"created_at":{"type":"string","title":"Created At","description":"RFC 3339 UTC."},"entries":{"type":"integer","title":"Entries","description":"Entries in this version."},"added":{"type":"integer","title":"Added"},"changed":{"type":"integer","title":"Changed"},"removed":{"type":"integer","title":"Removed"}},"type":"object","required":["id","created_at","entries","added","changed","removed"],"title":"BulkVersion"},"CalibrationBand":{"properties":{"score_from":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score From","description":"The band's lowest score (inclusive)."},"score_to":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score To","description":"The band's highest score (exclusive, but 1.0 is in the top band)."},"hosts":{"type":"integer","minimum":0.0,"title":"Hosts","description":"Labelled hosts whose score fell in this band."},"scam_sites":{"type":"integer","minimum":0.0,"title":"Scam Sites","description":"How many of them were scam or compromised sites."},"p_low":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Low","description":"95% interval of the band's scam share, low end (Clopper-Pearson)."},"p_high":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P High","description":"95% interval of the band's scam share, high end."},"p_scam_site":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam Site","description":"The probability served for a score in this band."}},"additionalProperties":false,"type":"object","required":["score_from","score_to","hosts","scam_sites","p_low","p_high","p_scam_site"],"title":"CalibrationBand"},"Campaign":{"properties":{"id":{"type":"string","title":"Id","description":"cmp_ and 16 hex: stable, the same kit is the same id in every answer."},"kind":{"type":"string","enum":["page_template","tracking_id"],"title":"Kind"},"value":{"type":"string","title":"Value","description":"The shared template hash, or the kit's Telegram bot id (tgbot:<id>)."},"domains":{"type":"integer","title":"Domains","description":"Registrable domains whose pages showed it, the asked one included."},"listed":{"type":"integer","title":"Listed","description":"Of those, on Bewary's scam list: at least 2 and at least half."},"first_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Observed","description":"RFC 3339 UTC: the first page read that showed it."},"last_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Observed","description":"RFC 3339 UTC: the latest."}},"additionalProperties":false,"type":"object","required":["id","kind","value","domains","listed","first_observed","last_observed"],"title":"Campaign"},"CardInfo":{"properties":{"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last4"}},"type":"object","title":"CardInfo"},"CheckoutIn":{"properties":{"pack":{"type":"string","title":"Pack","description":"The prepaid credit pack: pack_20 ($20, 10,000 credits), pack_100 ($100, 60,000 credits), pack_500 ($500, 375,000 credits), pack_2000 ($2,000, 2,000,000 credits). Credits never expire."}},"type":"object","required":["pack"],"title":"CheckoutIn"},"Classification":{"properties":{"artifact_type":{"type":"string","title":"Artifact Type","description":"What the message is: delivery_notice, account_alert, otp_or_2fa_code and so on."},"stance":{"type":"string","enum":["inbound_solicitation","user_own_record","ambiguous"],"title":"Stance"},"ask":{"type":"string","enum":["none","pay","click_link","call_back","give_credentials","give_code","install_app","reply","other"],"title":"Ask"},"scam_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scam Type","description":"Null until the calibrated classifier ships."},"impersonated_brand":{"anyOf":[{"$ref":"#/components/schemas/Brand"},{"type":"null"}]},"probabilities":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"Probabilities"}},"type":"object","required":["artifact_type","stance","ask"],"title":"Classification"},"ComplaintStats":{"properties":{"count":{"type":"integer","title":"Count"},"days":{"type":"integer","title":"Days","description":"Distinct days with a complaint."},"first_at":{"type":"string","title":"First At","description":"First complaint day, 00:00Z."},"last_at":{"type":"string","title":"Last At","description":"Last complaint day, 00:00Z."},"subjects":{"additionalProperties":{"type":"integer"},"type":"object","title":"Subjects","description":"FTC: subject code (imposters, debt_reduction, ...); FCC: call type (prerecorded_voice, live_voice, text_message, ...)."},"robocall_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Robocall Share","description":"FTC: recorded-message flag; FCC: prerecorded-voice share."},"daily":{"items":{"$ref":"#/components/schemas/DailyCount"},"type":"array","title":"Daily","description":"The last 90 days, only days with complaints, oldest first."},"reporter_states":{"additionalProperties":{"type":"integer"},"type":"object","title":"Reporter States","description":"Top 5 US states (USPS codes) of the people who complained."},"hours":{"additionalProperties":{"type":"integer"},"type":"object","title":"Hours","description":"Complaints by the hour of the call, \"0\" to \"23\", every hour present: the reporter's local time as they gave it (FCC: the call time; FTC: the call time when it was not given as midnight). 13 months."},"weekdays":{"additionalProperties":{"type":"integer"},"type":"object","title":"Weekdays","description":"Complaints by weekday of the complaint day, \"1\" (Monday) to \"7\", every day present. 13 months."}},"additionalProperties":false,"type":"object","required":["count","days","first_at","last_at","subjects","robocall_share","daily","reporter_states","hours","weekdays"],"title":"ComplaintStats","description":"One source's complaints about a number over the retained 13 months (DIRECTORY-CONTRACT.md).\nCounts only: never a complaint's text, a name or a place smaller than a state."},"CreditState":{"properties":{"period":{"type":"string","title":"Period","description":"The current UTC month, YYYY-MM."},"monthly_free":{"type":"integer","title":"Monthly Free","description":"Free credits every key gets each UTC month; they reset."},"monthly_used":{"type":"integer","title":"Monthly Used","description":"Free credits used this month."},"prepaid":{"type":"integer","title":"Prepaid","description":"Prepaid credits from packs. They never expire and are spent after the free ones."},"remaining":{"type":"integer","title":"Remaining","description":"What can be spent now: free credits left this month plus prepaid."},"billing_account":{"type":"boolean","title":"Billing Account","description":"The account has bought a pack: its receipts and invoices are in the billing portal (POST /v1/billing/portal).","default":false}},"type":"object","required":["period","monthly_free","monthly_used","prepaid","remaining"],"title":"CreditState"},"DailyCount":{"properties":{"day":{"type":"string","title":"Day","description":"YYYY-MM-DD."},"count":{"type":"integer","title":"Count"}},"additionalProperties":false,"type":"object","required":["day","count"],"title":"DailyCount"},"DatasetInfo":{"properties":{"id":{"type":"string","enum":["registration","dns","certificates","web_archive","threat_feeds","threat_aggregates","brand_registry","web_pages","ip_network","phone_numbering","us_numbering","phone_complaints","honeypot_lines","phone_reports_de","shortcodes","email_providers","breaches","wallet_reports","sanctions","issuer_freezes","community_reports","campaigns","text_model","platform_pages","iban_registry","bank_codes","app_stores","short_links","payment_profiles"],"title":"Id"},"name":{"type":"string","title":"Name"},"coverage":{"type":"string","pattern":"^(WW|[A-Z]{2})$","title":"Coverage","description":"WW: worldwide. A country code (US, DE): that country's data only."},"kind":{"type":"string","enum":["scam_list","reference","own_traffic","model"],"title":"Kind"},"entity_types":{"items":{"type":"string"},"type":"array","title":"Entity Types"},"active_entries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Entries","description":"Active entries now, for scam lists; null otherwise."},"refreshed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refreshed At","description":"RFC 3339 UTC of the last refresh, where tracked."},"target_countries":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Target Countries","description":"Active entries aimed at each country (ISO 3166-1 alpha-2), from the national lists that name them; entries no national list names are not counted here. Null when none."},"entity_countries":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Entity Countries","description":"Phone datasets: active entries by the number's own country. bank_codes: the bank codes held per country (an IBAN from another country is outside it). Null otherwise."},"checked_entries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checked Entries","description":"Domain datasets: active entries the hourly re-check has read so far (a full pass takes about a week). email_providers: throwaway-mail domains the re-check has read (a full pass takes about two days)."},"live_entries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Live Entries","description":"Of checked_entries, those that still resolve (live or parked); for email_providers, the throwaway domains that still receive mail. The rest are kept as history."},"quarantined_entries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quarantined Entries","description":"Scam lists: entries held back from every answer because the list had a bad day (far more new entries than usual, or many top sites and shorteners among them). Kept, not served, until the list's next clean day or a person lifts the hold. Null when none."},"held_entries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Held Entries","description":"Entries a lookup answers from now (1.9.0): a scam list's active entries; phone_complaints: the US numbers with complaints in the last 13 months (a superset of the listed repeat offenders); email_providers: throwaway-mail domains; dns: domains with recorded DNS state and change history; us_numbering: US number blocks with their original carrier; shortcodes, brand_registry, iban_registry, bank_codes: the codes, brands, countries and banks held. Null where a source is read at lookup time and holds no list."}},"type":"object","required":["id","name","coverage","kind","entity_types"],"title":"DatasetInfo"},"DatasetList":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"datasets":{"items":{"$ref":"#/components/schemas/DatasetInfo"},"type":"array","title":"Datasets"}},"type":"object","required":["schema_version","datasets"],"title":"DatasetList"},"DatasetRef":{"properties":{"dataset":{"type":"string","enum":["registration","dns","certificates","web_archive","threat_feeds","threat_aggregates","brand_registry","web_pages","ip_network","phone_numbering","us_numbering","phone_complaints","honeypot_lines","phone_reports_de","shortcodes","email_providers","breaches","wallet_reports","sanctions","issuer_freezes","community_reports","campaigns","text_model","platform_pages","iban_registry","bank_codes","app_stores","short_links","payment_profiles"],"title":"Dataset"},"coverage":{"type":"string","pattern":"^(WW|[A-Z]{2})$","title":"Coverage","description":"WW: worldwide. A country code (US, DE): the data describes only that country's numbers, codes or complaints."},"in_coverage":{"type":"boolean","title":"In Coverage"}},"type":"object","required":["dataset","coverage","in_coverage"],"title":"DatasetRef"},"Deleted":{"properties":{"id":{"type":"string","title":"Id"},"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["id","deleted"],"title":"Deleted"},"Delivery":{"properties":{"event_id":{"type":"string","title":"Event Id"},"event_type":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"],"title":"Event Type"},"status":{"type":"string","enum":["pending","delivering","succeeded","dead","cancelled"],"title":"Status","description":"pending: waiting for its next attempt; dead: every retry failed; cancelled: the endpoint was deleted or disabled first."},"attempts":{"type":"integer","title":"Attempts"},"last_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status","description":"The HTTP status of the last attempt."},"error":{"anyOf":[{"type":"string","enum":["http_status","timeout","network","blocked","secret_unavailable","endpoint_removed","internal"]},{"type":"null"}],"title":"Error","description":"Why the last attempt failed. blocked: the URL no longer resolves to public addresses only."},"next_attempt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Attempt At"},"delivered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivered At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["event_id","event_type","status","attempts","created_at"],"title":"Delivery"},"DirectoryNumber":{"properties":{"e164":{"type":"string","title":"E164"},"complaints":{"type":"integer","title":"Complaints"},"days":{"type":"integer","title":"Days"},"last_at":{"type":"string","title":"Last At","description":"Last complaint day, 00:00Z."},"top_subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Subject"},"indexable":{"type":"boolean","title":"Indexable"}},"type":"object","required":["e164","complaints","days","last_at","indexable"],"title":"DirectoryNumber"},"DnsFacts":{"properties":{"resolves":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolves"},"a":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"A"},"mx":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mx"},"ns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ns"}},"additionalProperties":false,"type":"object","title":"DnsFacts"},"DomainFacts":{"properties":{"registrable_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrable Domain","description":"The owner boundary per the Public Suffix List with its private section: x.pages.dev stays x.pages.dev. Block by this."},"registered_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered Domain","description":"The name a registry sold (Public Suffix List, ICANN section): x.pages.dev -> pages.dev. registered_at, expires_at and registrar describe this name."},"tld":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tld"},"tld_abuse":{"anyOf":[{"type":"string","enum":["low","medium","high"]},{"type":"null"}],"title":"Tld Abuse"},"registered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered At","description":"RFC 3339 UTC."},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"When the registration expires, RFC 3339 UTC, from RDAP."},"age_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age Days"},"age_bucket":{"anyOf":[{"type":"string","enum":["lt_7d","d7_30","d30_90","d90_365","gt_1y","unknown"]},{"type":"null"}],"title":"Age Bucket"},"registrar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrar","description":"The registrar's name, from RDAP."},"dns":{"anyOf":[{"$ref":"#/components/schemas/DnsFacts"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["live","gone","broken","parked","held","unknown"]},{"type":"null"}],"title":"Status","description":"What the domain is doing now: live (resolves), gone (NXDOMAIN), broken (SERVFAIL: a delegation that no longer answers), parked (a parking service's name servers), held (does not resolve because its registry or registrar holds it, see hold), unknown (no answer in time)."},"cert_first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cert First Seen"},"lookalike":{"anyOf":[{"$ref":"#/components/schemas/Lookalike"},{"type":"null"}]},"platform":{"anyOf":[{"type":"string","enum":["none","multi_tenant"]},{"type":"null"}],"title":"Platform"},"allowlisted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowlisted"},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed","description":"On Bewary's scam list."},"seen_in_checks_7d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seen In Checks 7D"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"ISO 3166-1 alpha-2 country its country-code TLD names; null for generic TLDs and generic-use ccTLDs (.co, .io, .tv...)."},"target_countries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Countries","description":"ISO 3166-1 alpha-2 countries whose people it is aimed at, from the national lists that name it (CERT Polska: PL, Taiwan's 165 line: TW, Germany's regulator: DE, US complaint feeds: US). Empty when no list with a national scope names it."},"list_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Count","description":"How many lists name it (our own and others'); 96% of listed domains are on one list (2026-10-27)."},"site":{"anyOf":[{"$ref":"#/components/schemas/SiteVerdict"},{"type":"null"}],"description":"Our verdict on the site, when our worker read its page in the last 90 days; null otherwise."},"platform_status":{"anyOf":[{"$ref":"#/components/schemas/PlatformStatus"},{"type":"null"}],"description":"The hosting platform's own answer about the site (Vercel's takedown page, Cloudflare's phishing warning, a host's not-found page), when our worker read it; null otherwise."},"registry_status":{"anyOf":[{"items":{"type":"string","enum":["active","inactive","associated","locked","validated","proxy","private","removed","obscured","add_period","auto_renew_period","renew_period","transfer_period","redemption_period","pending_create","pending_delete","pending_renew","pending_restore","pending_transfer","pending_update","client_hold","server_hold","client_delete_prohibited","client_renew_prohibited","client_transfer_prohibited","client_update_prohibited","server_delete_prohibited","server_renew_prohibited","server_transfer_prohibited","server_update_prohibited","delete_prohibited","renew_prohibited","transfer_prohibited","update_prohibited","other"]},"type":"array"},{"type":"null"}],"title":"Registry Status","description":"The status codes the registry publishes for registered_domain (the EPP statuses of RFC 5731 and 3915 as RDAP carries them, RFC 8056), in snake case: server_hold, client_hold, redemption_period, pending_delete, client_transfer_prohibited and the rest. Null when the registry publishes no status."},"hold":{"anyOf":[{"type":"string","enum":["none","registrar","registry","both"]},{"type":"null"}],"title":"Hold","description":"Who holds the name out of the DNS: registry (serverHold), registrar (clientHold), both, or none. A hold is how registries and registrars take a domain down. Null when the registry's status is unknown."},"registered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Registered","description":"true: the registry has registered_domain; false: the registry answered that no such name is registered (it lapsed or was deleted, and anyone may register it). Null when no registration service covers the TLD."},"registration_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Checked At","description":"When the registration record (registered_at, expires_at, registrar, registry_status, hold) was read, RFC 3339 UTC. An answer is kept up to 7 days; a daily pass reads names on our lists again, those that stopped resolving first."},"archive":{"anyOf":[{"$ref":"#/components/schemas/ArchiveHistory"},{"type":"null"}],"description":"The site's history in a public web archive; null until we have read it (a first lookup queues the read)."},"first_seen_by_bewary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen By Bewary","description":"When Bewary's own watch first saw this host, in a new certificate or a new name in a registry's zone file, RFC 3339 UTC; null when it never did."},"first_listed_publicly":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Listed Publicly","description":"When a public list we read first named this host, RFC 3339 UTC; null when none names it, or when a list naming it already did the first time we read that list (the date it was added there is not known)."}},"additionalProperties":false,"type":"object","title":"DomainFacts"},"EmailFacts":{"properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Entity id of the address's domain."},"mx":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mx"},"disposable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disposable"},"free_provider":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Free Provider"},"role_account":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Role Account"},"disposable_status":{"anyOf":[{"type":"string","enum":["receiving","dead","unknown"]},{"type":"null"}],"title":"Disposable Status","description":"For a throwaway provider: receiving (it still takes mail: a mail host that resolves, or the domain's own address when it has no MX, RFC 5321), dead (the name is gone, declares it takes no mail with a null MX, RFC 7505, or has no mail host that resolves), unknown (not re-checked yet). Null when not disposable."},"disposable_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disposable Checked At","description":"When the throwaway domain was last re-checked, RFC 3339 UTC; null when not disposable or not checked yet."}},"additionalProperties":false,"type":"object","title":"EmailFacts"},"Entity":{"properties":{"id":{"type":"string","title":"Id","description":"e1, e2 and so on, unique in the response."},"type":{"type":"string","enum":["url","domain","ip","phone","shortcode","email","wallet","payment_handle","iban","app"],"title":"Type"},"value":{"type":"string","title":"Value"},"normalized":{"type":"string","title":"Normalized"},"role":{"type":"string","enum":["sender","link_target","redirect_hop","hosting","callback_number","reply_to","payee","mentioned","unknown"],"title":"Role"},"verdict":{"type":"string","enum":["scam","suspicious","safe","unknown"],"title":"Verdict"},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam"},"risk_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Risk Score"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"facts":{"anyOf":[{"$ref":"#/components/schemas/UrlFacts"},{"$ref":"#/components/schemas/DomainFacts"},{"$ref":"#/components/schemas/IpFacts"},{"$ref":"#/components/schemas/PhoneFacts"},{"$ref":"#/components/schemas/ShortcodeFacts"},{"$ref":"#/components/schemas/EmailFacts"},{"$ref":"#/components/schemas/WalletFacts"},{"$ref":"#/components/schemas/PaymentHandleFacts"},{"$ref":"#/components/schemas/IbanFacts"},{"$ref":"#/components/schemas/AppFacts"}],"title":"Facts","description":"Typed facts for the entity's type. Every key present, null when unknown."},"related":{"items":{"type":"string"},"type":"array","title":"Related","description":"Ids of linked entities: a link's domain, a redirect target."},"datasets":{"items":{"$ref":"#/components/schemas/DatasetRef"},"type":"array","title":"Datasets","description":"Every dataset checked for this entity, with its geography. in_coverage false means the dataset does not cover this entity (a US-only dataset and a non-US number), so its silence is not a clean result."}},"type":"object","required":["id","type","value","normalized","role","verdict","p_scam","risk_score","reason_codes","facts","related","datasets"],"title":"Entity"},"Envelope":{"properties":{"schema_version":{"type":"string","title":"Schema Version","examples":["1.9.0"]},"request_id":{"type":"string","title":"Request Id","examples":["req_01M5JTGK1BGJZ05TT8ZM9TJK0J"]},"checked_at":{"type":"string","title":"Checked At","description":"RFC 3339 UTC."},"engine":{"type":"string","title":"Engine"},"models":{"$ref":"#/components/schemas/ModelsUsed"},"input":{"$ref":"#/components/schemas/InputInfo"},"verdict":{"type":"string","enum":["scam","suspicious","safe","unknown"],"title":"Verdict"},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam","description":"Probability that the input is part of a scam."},"risk_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Risk Score"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence"},"classification":{"anyOf":[{"$ref":"#/components/schemas/Classification"},{"type":"null"}]},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes","description":"The codes that decided the verdict, strongest first, at most 5."},"entities":{"items":{"$ref":"#/components/schemas/Entity"},"type":"array","title":"Entities"},"signals":{"items":{"$ref":"#/components/schemas/Signal"},"type":"array","title":"Signals"},"degraded":{"type":"boolean","title":"Degraded"},"degraded_reasons":{"items":{"type":"string","enum":["source_timeout","source_unavailable","budget_limit","redirect_unresolved","input_truncated","model_unavailable","page_unavailable"]},"type":"array","title":"Degraded Reasons"},"cached":{"type":"boolean","title":"Cached"},"explanation":{"anyOf":[{"$ref":"#/components/schemas/Explanation"},{"type":"null"}]}},"type":"object","required":["schema_version","request_id","checked_at","engine","models","input","verdict","p_scam","risk_score","confidence","reason_codes","entities","signals","degraded","degraded_reasons","cached"],"title":"Envelope","description":"The answer of every lookup and check."},"ErrorDetail":{"properties":{"code":{"type":"string","enum":["invalid_input","unsupported_type","unauthorized","forbidden","quota_exceeded","rate_limited","not_found","input_too_large","internal","degraded_unavailable","gone"],"title":"Code"},"message":{"type":"string","title":"Message"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"}},"type":"object","required":["code","message"],"title":"ErrorDetail"},"ErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"ErrorResponse"},"Event":{"properties":{"id":{"type":"string","title":"Id","description":"evt_ + a ULID; the webhook-id header of its deliveries."},"type":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"],"title":"Type"},"at":{"type":"string","title":"At","description":"When Bewary observed the change. RFC 3339 UTC."},"watch_id":{"type":"string","title":"Watch Id"},"entity":{"$ref":"#/components/schemas/WatchEntity"},"before":{"anyOf":[{"$ref":"#/components/schemas/EventState"},{"type":"null"}]},"after":{"anyOf":[{"$ref":"#/components/schemas/EventState"},{"type":"null"}]},"datasets":{"items":{"type":"string","enum":["registration","dns","certificates","web_archive","threat_feeds","threat_aggregates","brand_registry","web_pages","ip_network","phone_numbering","us_numbering","phone_complaints","honeypot_lines","phone_reports_de","shortcodes","email_providers","breaches","wallet_reports","sanctions","issuer_freezes","community_reports","campaigns","text_model","platform_pages","iban_registry","bank_codes","app_stores","short_links","payment_profiles"]},"type":"array","title":"Datasets","description":"The datasets the change was read from (section 6.1)."}},"additionalProperties":false,"type":"object","required":["id","type","at","watch_id","entity","datasets"],"title":"Event"},"EventPage":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"events":{"items":{"$ref":"#/components/schemas/Event"},"type":"array","title":"Events","description":"Oldest first."},"next_cursor":{"type":"string","title":"Next Cursor","description":"Pass as `cursor` for the events after these; returned even when no event came, so a poller keeps its place."},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["schema_version","events","next_cursor","has_more"],"title":"EventPage"},"EventState":{"properties":{"status":{"anyOf":[{"type":"string","enum":["live","gone","broken","parked"]},{"type":"null"}],"title":"Status","description":"DNS status."},"a":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"A","description":"IPv4 addresses, sorted."},"ns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ns","description":"Name servers of the zone, sorted."},"registered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered At","description":"The registry's registration date; null: the registry has no registration. RFC 3339 UTC."},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"The registry's expiry date. RFC 3339 UTC."},"within_days":{"anyOf":[{"type":"integer","enum":[7,30]},{"type":"null"}],"title":"Within Days","description":"domain.expiring: the threshold crossed."},"hold":{"anyOf":[{"type":"string","enum":["none","registrar","registry","both"]},{"type":"null"}],"title":"Hold","description":"Who holds the name out of the DNS (E4's daily registry pass): none, registry, registrar or both."},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed","description":"On a Bewary scam list, as the lookup's `listed` fact."},"sanctioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sanctioned"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Brand events: the lookalike domain."},"technique":{"anyOf":[{"type":"string","enum":["brand_word","typo","brand_tld","homoglyph","mixed_script"]},{"type":"null"}],"title":"Technique","description":"Brand events: how the name imitates the brand: next to a scam word, one letter off, on an abused TLD, spelled with look-alike characters (1.5.0: the last two and brand_tld)."},"origin":{"anyOf":[{"type":"string","enum":["cert","zone"]},{"type":"null"}],"title":"Origin","description":"Brand events: first seen in a certificate or in a zone file."}},"additionalProperties":false,"type":"object","title":"EventState","description":"`before` and `after` of an event: only the fields the change is about are present."},"Exchange":{"properties":{"nxx":{"type":"string","title":"Nxx","description":"The exchange: the three digits after the area code."},"numbers":{"type":"integer","title":"Numbers"},"complaints":{"type":"integer","title":"Complaints"}},"type":"object","required":["nxx","numbers","complaints"],"title":"Exchange"},"Explanation":{"properties":{"text":{"type":"string","title":"Text"},"language":{"type":"string","title":"Language"}},"type":"object","required":["text","language"],"title":"Explanation"},"HistoryStart":{"properties":{"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From","description":"Our earliest record for this type, RFC 3339 UTC."}},"type":"object","title":"HistoryStart"},"IbanBank":{"properties":{"name":{"type":"string","title":"Name","description":"The bank's name as its country's list gives it."},"bic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bic","description":"Its BIC (ISO 9362) from the same list, or null when the list has none."},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"The publisher's attribution for that list, e.g. 'Source: National Bank of Belgium' (1.6.0). Show it where the bank's name is shown."},"free_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Free At","description":"Where the publisher gives the list free of charge (1.6.0). Several publishers (NBB, Banka Slovenije, Banco de Espana, the ECB) require that a buyer is told the data is free at the source each time it is provided."}},"additionalProperties":false,"type":"object","required":["name"],"title":"IbanBank","description":"The bank a national bank-code list names for the IBAN's bank code. Never the account holder."},"IbanFacts":{"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"ISO 3166-1 alpha-2 from the IBAN's first two letters."},"sepa":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sepa","description":"The SWIFT IBAN registry marks the country as a SEPA country; null for a country the registry does not list."},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Valid","description":"ISO 13616: a registry country, its length, its BBAN structure and the check digits (MOD 97-10)."},"invalid_reason":{"anyOf":[{"type":"string","enum":["country","length","structure","checksum"]},{"type":"null"}],"title":"Invalid Reason","description":"The first check that failed; null when valid."},"print_form":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Print Form","description":"The print format: groups of four separated by a space."},"bank_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Code","description":"The bank identifier at its country's position in the BBAN (SWIFT IBAN registry); null unless valid."},"branch_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Code","description":"The branch identifier where the country has one; null unless valid."},"bank":{"anyOf":[{"$ref":"#/components/schemas/IbanBank"},{"type":"null"}],"description":"The bank its country's national list names for bank_code; null when we hold no list for the country (the entity's bank_codes dataset then has in_coverage false) or the code is not in it."},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed","description":"On Bewary's scam list: a community report named this account."},"list_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Count","description":"How many lists name it (our own and others'); 96% of listed domains are on one list (2026-10-27)."}},"additionalProperties":false,"type":"object","title":"IbanFacts","description":"An IBAN (task E11, added 2026-10-29): the account number's validity and its bank, never its holder."},"IndexableNumbers":{"properties":{"total":{"type":"integer","title":"Total","description":"Indexable numbers: the index rule, inside the current wave (at most DIRECTORY_INDEX_CAP)."},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"numbers":{"items":{"type":"string"},"type":"array","title":"Numbers"}},"type":"object","required":["total","page","per_page","numbers"],"title":"IndexableNumbers"},"InputInfo":{"properties":{"kind":{"type":"string","enum":["lookup","message","screenshot"],"title":"Kind"},"channel":{"type":"string","enum":["sms","email","web","voice","social_dm","messaging_app","unknown"],"title":"Channel"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},"type":"object","required":["kind","channel"],"title":"InputInfo"},"IpFacts":{"properties":{"version":{"anyOf":[{"type":"integer","enum":[4,6]},{"type":"null"}],"title":"Version"},"asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Asn"},"as_org":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Org"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"Registry country of the address block."},"hosting_type":{"anyOf":[{"type":"string","enum":["datacenter","cdn","residential","mobile","business","unknown"]},{"type":"null"}],"title":"Hosting Type"},"reverse_dns":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reverse Dns"},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed"}},"additionalProperties":false,"type":"object","title":"IpFacts"},"ItemError":{"properties":{"code":{"type":"string","enum":["invalid_input","unsupported_type"],"title":"Code"}},"type":"object","required":["code"],"title":"ItemError"},"KeyCreated":{"properties":{"id":{"type":"string","title":"Id"},"key":{"type":"string","title":"Key","description":"Shown once. Bewary keeps only a hash."},"note":{"type":"string","title":"Note"}},"type":"object","required":["id","key","note"],"title":"KeyCreated"},"KeyIn":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Name"},"bulk":{"type":"boolean","title":"Bulk","description":"The key may download the bulk files and read the TAXII collection, which spends a day pass (GET /v1/bulk). Off unless asked for.","default":false}},"type":"object","title":"KeyIn"},"KeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked":{"type":"boolean","title":"Revoked"},"bulk":{"type":"boolean","title":"Bulk","description":"The key may download the bulk files and read the TAXII collection.","default":false}},"type":"object","required":["id","revoked"],"title":"KeyInfo"},"KeyList":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/KeyInfo"},"type":"array","title":"Keys"}},"type":"object","required":["keys"],"title":"KeyList"},"KeyPatch":{"properties":{"bulk":{"type":"boolean","title":"Bulk","description":"Enable or disable bulk delivery on this key."}},"type":"object","required":["bulk"],"title":"KeyPatch"},"LastTopUp":{"properties":{"status":{"type":"string","enum":["pending","processing","succeeded","failed"],"title":"Status"},"pack":{"type":"string","title":"Pack"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Stripe's decline code when it failed, e.g. card_declined."},"created_at":{"type":"string","title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["status","pack","created_at"],"title":"LastTopUp"},"LeadStats":{"properties":{"count":{"type":"integer","title":"Count"},"median":{"type":"number","title":"Median"},"p25":{"type":"number","title":"P25"},"p75":{"type":"number","title":"P75"},"max":{"type":"number","title":"Max"}},"type":"object","required":["count","median","p25","p75","max"],"title":"LeadStats"},"Lookalike":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"technique":{"anyOf":[{"type":"string","enum":["homoglyph","typo","brand_word","brand_scam_word","subdomain","tld_swap","userinfo"]},{"type":"null"}],"title":"Technique"}},"additionalProperties":false,"type":"object","title":"Lookalike"},"LowBalanceEmail":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"On by default; sent once each time the balance falls under the threshold after having been at or over it.","default":true},"threshold":{"type":"integer","minimum":0.0,"title":"Threshold","default":2000}},"type":"object","title":"LowBalanceEmail"},"ModelsUsed":{"properties":{"judge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Judge"},"vision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vision"},"verify":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verify"},"deep_tools":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deep Tools"},"calibration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calibration"}},"additionalProperties":true,"type":"object","title":"ModelsUsed"},"MonthCount":{"properties":{"month":{"type":"string","title":"Month","description":"YYYY-MM."},"complaints":{"type":"integer","title":"Complaints"}},"type":"object","required":["month","complaints"],"title":"MonthCount"},"NumberLink":{"properties":{"e164":{"type":"string","title":"E164"},"reports":{"type":"integer","title":"Reports"},"indexable":{"type":"boolean","title":"Indexable","description":"The linked number has a page: the index rule, inside the current wave."}},"additionalProperties":false,"type":"object","required":["e164","reports","indexable"],"title":"NumberLink"},"NumberPage":{"properties":{"e164":{"type":"string","title":"E164"},"as_of":{"type":"string","title":"As Of"},"indexable":{"type":"boolean","title":"Indexable","description":"The index rule, inside the current wave: the page may be indexed."},"lookup":{"$ref":"#/components/schemas/Envelope","description":"What GET /v1/phone/{e164} answers an anonymous caller."},"area":{"$ref":"#/components/schemas/AreaNeighbors"}},"type":"object","required":["e164","as_of","indexable","lookup","area"],"title":"NumberPage"},"Operator":{"properties":{"name":{"type":"string","title":"Name"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"}},"additionalProperties":false,"type":"object","required":["name"],"title":"Operator"},"PageFacts":{"properties":{"analyzed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Analyzed","description":"The page was read (deep=true only)."},"title_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Title Present"},"has_login_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Login Form"},"has_payment_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Payment Form"},"brand_shown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Shown","description":"Brand id the page shows, if any."}},"additionalProperties":false,"type":"object","title":"PageFacts"},"PaymentHandleFacts":{"properties":{"provider":{"anyOf":[{"type":"string","enum":["cashapp","venmo","zelle","paypal","other"]},{"type":"null"}],"title":"Provider"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle","description":"The handle, lowercase, without $ or @."},"reports":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reports"},"status":{"anyOf":[{"type":"string","enum":["active","inactive","not_found","refused","unknown"]},{"type":"null"}],"title":"Status","description":"From the service's public profile page (E8, added 2026-10-29): active (a profile is shown), inactive (the service shows the profile as not active: PayPal only), not_found (no profile under this name: never made, or closed), refused (the service refused our read), unknown (no answer we can read). Existence and status only: never the name, photo or anything else on the page. Null for a provider we do not read."},"status_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Checked At","description":"When the profile page was read, RFC 3339 UTC."}},"additionalProperties":false,"type":"object","title":"PaymentHandleFacts"},"PhoneComplaints":{"properties":{"ftc":{"anyOf":[{"$ref":"#/components/schemas/ComplaintStats"},{"type":"null"}]},"fcc":{"anyOf":[{"$ref":"#/components/schemas/ComplaintStats"},{"type":"null"}]},"callbacks":{"anyOf":[{"items":{"$ref":"#/components/schemas/NumberLink"},"type":"array"},{"type":"null"}],"title":"Callbacks","description":"FCC: the callback numbers calls from this number told people to call, most reports first, at most 5; null when none."},"pushed_by":{"anyOf":[{"$ref":"#/components/schemas/PushedBy"},{"type":"null"}],"description":"FCC: this number as the callback number in other numbers' calls; null when it never was one."}},"additionalProperties":false,"type":"object","title":"PhoneComplaints"},"PhoneFacts":{"properties":{"e164":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"E164"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"number_type":{"anyOf":[{"type":"string","enum":["mobile","landline","voip","toll_free","premium","shared_cost","shortcode","unknown"]},{"type":"null"}],"title":"Number Type"},"original_carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Carrier"},"line_type":{"anyOf":[{"type":"string","enum":["mobile","landline","voip","toll_free","premium","shared_cost","shortcode","unknown"]},{"type":"null"}],"title":"Line Type"},"complaints":{"anyOf":[{"$ref":"#/components/schemas/PhoneComplaints"},{"type":"null"}],"description":"FTC and FCC complaints; null when the directory could not be read."},"honeypot_hits_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Honeypot Hits 30D"},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed"},"public_listing":{"anyOf":[{"type":"string","enum":["business","personal","none","unknown"]},{"type":"null"}],"title":"Public Listing","description":"Never a person's name."},"indexable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Indexable","description":"The number has a directory page: it meets the index rule (two independent signals) and is inside the current wave."},"target_countries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Countries","description":"ISO 3166-1 alpha-2 countries whose people it is aimed at, from the national lists that name it (CERT Polska: PL, Taiwan's 165 line: TW, Germany's regulator: DE, US complaint feeds: US). Empty when no list with a national scope names it."},"list_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Count","description":"How many lists name it (our own and others'); 96% of listed domains are on one list (2026-10-27)."}},"additionalProperties":false,"type":"object","title":"PhoneFacts"},"Pivot":{"properties":{"kind":{"type":"string","enum":["ip","ip_net","asn","name_servers","certificate","registration","page_template","tracking_id"],"title":"Kind"},"value":{"type":"string","title":"Value","description":"ip: an IPv4 address; ip_net: its /24; asn: AS<number>; name_servers: the zone's name servers, sorted, comma-joined; certificate: the serial number in hex; registration: the registrar; page_template: the page's structure hash; tracking_id: <kind>:<id>, e.g. ga4:G-ABC123 or tgbot:123456789."},"domains":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Domains","description":"Other registrable domains in Bewary's data that share it; null when it was excluded before they were counted (a CDN address, an ASN holding more than 300 of our addresses)."},"domains_capped":{"type":"boolean","title":"Domains Capped","description":"More share it than the cut for its kind: domains is that cut + 1."},"used":{"type":"boolean","title":"Used","description":"It relates the domain to at least one other domain below."},"excluded":{"anyOf":[{"type":"string","enum":["cdn","shared","dns_provider","parking","platform","not_routable","legitimate_overlap","generic_page"]},{"type":"null"}],"title":"Excluded","description":"Why it was not pivoted on: cdn (a CDN network), shared (more domains share it than the measured cut, or more ordinary sites than listed domains are behind it), dns_provider (name servers of a DNS provider), parking (a parking service's name servers or network), platform (the zone of a hosting platform the domain is a tenant of), not_routable, legitimate_overlap (also held by a known site, a brand's own domain or, for a page template or tracking id, a parked host), generic_page (also seen on an error page or a bot check)."},"first_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Observed","description":"RFC 3339 UTC. For a certificate, when we logged it; for a registration, the registration time."},"last_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Observed","description":"RFC 3339 UTC. For a certificate, when we logged it; for a registration, the registration time."},"current":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Current","description":"DNS kinds: the domain's latest observation still holds it."}},"additionalProperties":false,"type":"object","required":["kind","value","domains","domains_capped","used","excluded","first_observed","last_observed","current"],"title":"Pivot"},"PlatformStatus":{"properties":{"platform":{"type":"string","enum":["vercel","netlify","cloudflare","github_pages","firebase","render","glitch","blogger","gitbook","godaddy_sites","lovable","heroku","surge","replit","framer","weebly","square_online","wix","webflow","canva_sites","google_docs","linktree","jotform","microsoft_forms","typeform"],"title":"Platform"},"status":{"type":"string","enum":["taken_down","warning","not_found","suspended"],"title":"Status","description":"taken_down: the platform's page says it removed or blocked it for abuse or a terms violation. warning: the platform shows its own phishing or malware warning in front of it. not_found: the platform serves nothing here (never made, deleted by its owner, or removed without saying why: most hosts show one page for all three). suspended: paused for its owner's plan or usage, or by its owner; not a verdict on the site."},"read_at":{"type":"string","title":"Read At","description":"The newest read that showed this page, RFC 3339 UTC."},"flagged_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flagged At","description":"The first read that showed the platform's takedown page (else its warning page) since the site was last seen live, RFC 3339 UTC. Kept when the platform later deletes the site; null if it never flagged it."}},"additionalProperties":false,"type":"object","required":["platform","status","read_at"],"title":"PlatformStatus","description":"What the hosting or form platform itself serves here, from a page our own worker read in the last 90 days\n(E5/E7). Only the platform's own pages count; a live page read after them clears the fact."},"PushedBy":{"properties":{"reports":{"type":"integer","title":"Reports","description":"Complaints that named this number as the callback number."},"days":{"type":"integer","title":"Days","description":"Distinct days with such a complaint."},"callers":{"type":"integer","title":"Callers","description":"Distinct caller IDs that pushed it (complaints with no caller ID not counted)."},"first_at":{"type":"string","title":"First At","description":"First such day, 00:00Z."},"last_at":{"type":"string","title":"Last At","description":"Last such day, 00:00Z."},"subjects":{"additionalProperties":{"type":"integer"},"type":"object","title":"Subjects","description":"The FCC call types of those complaints (prerecorded_voice, live_voice, text_message, ...), most first."},"daily":{"items":{"$ref":"#/components/schemas/DailyCount"},"type":"array","title":"Daily","description":"The last 90 days, only days with reports, oldest first."},"hours":{"additionalProperties":{"type":"integer"},"type":"object","title":"Hours","description":"Reports by the hour of the call, \"0\" to \"23\", every hour present."},"weekdays":{"additionalProperties":{"type":"integer"},"type":"object","title":"Weekdays","description":"Reports by weekday, \"1\" (Monday) to \"7\", every day present."},"reporter_states":{"additionalProperties":{"type":"integer"},"type":"object","title":"Reporter States","description":"Top 5 US states (USPS codes) of the people who complained."},"top":{"items":{"$ref":"#/components/schemas/NumberLink"},"type":"array","title":"Top","description":"The caller IDs that pushed it, most reports first, at most 20."}},"additionalProperties":false,"type":"object","required":["reports","days","callers","first_at","last_at","subjects","daily","hours","weekdays","reporter_states","top"],"title":"PushedBy","description":"A number as the callback number other numbers' calls told people to call (FCC)."},"RedirectHop":{"properties":{"url":{"type":"string","title":"Url","description":"A short link we read: the link itself, then any other short link it led to."},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status","description":"The HTTP status the shortener answered. The destination is never requested, so it is final_url, not a hop."}},"additionalProperties":false,"type":"object","required":["url"],"title":"RedirectHop"},"RelatedDomain":{"properties":{"domain":{"type":"string","title":"Domain","description":"The related registrable domain."},"hosts":{"items":{"type":"string"},"type":"array","title":"Hosts","description":"Up to 5 of its hosts that carry the relations."},"verdict":{"type":"string","enum":["scam","suspicious","safe","unknown"],"title":"Verdict","description":"Its own verdict, from what Bewary holds (as for the asked domain)."},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"listed":{"type":"boolean","title":"Listed"},"known_site":{"type":"boolean","title":"Known Site"},"strength":{"type":"string","enum":["strong","medium","weak"],"title":"Strength","description":"Its strongest relation."},"relations":{"items":{"$ref":"#/components/schemas/Relation"},"type":"array","title":"Relations","description":"Strongest first."}},"additionalProperties":false,"type":"object","required":["domain","hosts","verdict","p_scam","reason_codes","listed","known_site","strength","relations"],"title":"RelatedDomain"},"RelatedResponse":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"request_id":{"type":"string","title":"Request Id"},"checked_at":{"type":"string","title":"Checked At","description":"RFC 3339 UTC."},"engine":{"type":"string","title":"Engine"},"domain":{"$ref":"#/components/schemas/RelatedSelf"},"dns_observed":{"type":"string","enum":["stored","live","none"],"title":"Dns Observed","description":"stored: from Bewary's hourly re-check history; live: resolved for this call (not a domain Bewary tracks); none: it did not resolve in time."},"pivots":{"items":{"$ref":"#/components/schemas/Pivot"},"type":"array","title":"Pivots","description":"Every value of the domain's that was considered, used or not."},"related":{"items":{"$ref":"#/components/schemas/RelatedDomain"},"type":"array","title":"Related","description":"This page, strongest first."},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"total":{"type":"integer","title":"Total","description":"Related domains over all pages (at most 500)."},"has_more":{"type":"boolean","title":"Has More"},"truncated":{"type":"boolean","title":"Truncated","description":"More than 500 related domains: only the strongest 500 are paged."},"campaigns":{"items":{"$ref":"#/components/schemas/Campaign"},"type":"array","title":"Campaigns","description":"Kits this domain is part of (D4): one page template or one kit's Telegram bot shown by 2+ listed domains, listed being at least half of those showing it, never on a known, brand-owned or parked host."},"credits":{"type":"integer","title":"Credits"}},"type":"object","required":["schema_version","request_id","checked_at","engine","domain","dns_observed","pivots","related","page","per_page","total","has_more","truncated","campaigns","credits"],"title":"RelatedResponse","description":"GET /v1/domain/{host}/related (API-CONTRACT section 2.6)."},"RelatedSelf":{"properties":{"value":{"type":"string","title":"Value","description":"The domain asked about, canonical."},"registrable_domain":{"type":"string","title":"Registrable Domain","description":"Its owner boundary (Public Suffix List with its private section)."},"verdict":{"type":"string","enum":["scam","suspicious","safe","unknown"],"title":"Verdict","description":"From what Bewary holds without a new lookup: lists, the name rule, stored protective-DNS refusals. GET /v1/domain/{host} reads more."},"p_scam":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"listed":{"type":"boolean","title":"Listed","description":"On Bewary's scam list."},"known_site":{"type":"boolean","title":"Known Site","description":"A top-100K site or a business's official website."}},"additionalProperties":false,"type":"object","required":["value","registrable_domain","verdict","p_scam","reason_codes","listed","known_site"],"title":"RelatedSelf"},"Relation":{"properties":{"kind":{"type":"string","enum":["ip","ip_net","asn","name_servers","certificate","registration","page_template","tracking_id"],"title":"Kind"},"value":{"type":"string","title":"Value","description":"The shared value, as in pivots."},"strength":{"type":"string","enum":["strong","medium","weak"],"title":"Strength","description":"strong: few domains share it and the two held it at the same time; medium; weak: a /24, an ASN, a registration minute, or a value many share. A link, never a merge."},"domains":{"type":"integer","title":"Domains","description":"Other registrable domains sharing this value (the asked domain excluded)."},"first_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Observed","description":"When the related domain was first seen with it. RFC 3339 UTC. For a certificate, when we logged it; for a registration, the registration time."},"last_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Observed","description":"When it was last seen with it. RFC 3339 UTC. For a certificate, when we logged it; for a registration, the registration time."},"current":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Current","description":"DNS kinds: the related domain still holds it."},"concurrent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Concurrent","description":"DNS kinds: the two domains held it at the same time."}},"additionalProperties":false,"type":"object","required":["kind","value","strength","domains","first_observed","last_observed","current","concurrent"],"title":"Relation"},"ShortLink":{"properties":{"service":{"type":"string","enum":["bit.ly","tinyurl.com","is.gd","v.gd","cutt.ly","rebrand.ly","t.ly","ow.ly","shorturl.at","tiny.cc","t.co","qrco.de","surl.li","u.to","zpr.io","vk.cc","clck.ru","other"],"title":"Service","description":"The shortening service, named by its main short domain (j.mp is bit.ly, rb.gy is rebrand.ly, q-r.to and l.ead.me are qrco.de). other: a shortener we follow but whose block and warning pages are not measured."},"state":{"type":"string","enum":["active","warning","disabled","removed","not_found","hosted","refused","unknown"],"title":"State","description":"active: it redirects to final_url. warning: it shows its own warning page before the destination. disabled: the shortener disabled the link and says why (reason). removed: the link existed and no longer works, no reason given. not_found: the service has no such link. hosted: the service answers with a page of its own instead of a redirect. refused: the service refused our read. unknown: no answer we can read."},"reason":{"anyOf":[{"type":"string","enum":["terms","account_suspended","threat"]},{"type":"null"}],"title":"Reason","description":"When disabled: it broke the service's rules (terms), the account that made it was suspended for abuse (account_suspended), or the service flagged it as harmful (threat). Null otherwise."},"read_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Read At","description":"When the shortener's answer was read, RFC 3339 UTC."}},"additionalProperties":false,"type":"object","required":["service","state"],"title":"ShortLink","description":"What the shortener itself says about the link, read from its own answer (E3, added 2026-10-29)."},"ShortcodeFacts":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"status":{"anyOf":[{"type":"string","enum":["legitimate","mixed","scam","unknown"]},{"type":"null"}],"title":"Status"},"operator":{"anyOf":[{"$ref":"#/components/schemas/Operator"},{"type":"null"}]},"legit_uses":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Legit Uses"},"reports_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reports 30D"}},"additionalProperties":false,"type":"object","title":"ShortcodeFacts"},"Signal":{"properties":{"code":{"type":"string","title":"Code","description":"A stable reason code, https://bewary.app/docs/reason-codes"},"entity":{"type":"string","title":"Entity","description":"The entity id, or \"message\"."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"title":"Severity"},"weight":{"type":"number","title":"Weight","description":"Signed contribution: positive toward scam, negative reassuring."},"source_class":{"type":"string","enum":["confirmed","first_party","heuristic","model","attacker_content"],"title":"Source Class"},"p":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P","description":"Model probability when source_class is model."},"dataset":{"type":"string","enum":["registration","dns","certificates","web_archive","threat_feeds","threat_aggregates","brand_registry","web_pages","ip_network","phone_numbering","us_numbering","phone_complaints","honeypot_lines","phone_reports_de","shortcodes","email_providers","breaches","wallet_reports","sanctions","issuer_freezes","community_reports","campaigns","text_model","platform_pages","iban_registry","bank_codes","app_stores","short_links","payment_profiles"],"title":"Dataset","description":"The dataset the signal came from, https://bewary.app/data"},"coverage":{"type":"string","pattern":"^(WW|[A-Z]{2})$","title":"Coverage","description":"That dataset's geography: WW (worldwide) or a country code (US, DE)."},"evidence":{"additionalProperties":true,"type":"object","title":"Evidence"}},"type":"object","required":["code","entity","severity","weight","source_class","dataset","coverage","evidence"],"title":"Signal"},"SiteBand":{"properties":{"score_from":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score From","description":"The band's lowest score (inclusive)."},"score_to":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score To","description":"The band's highest score (exclusive, but 1.0 is in the top band)."},"hosts":{"type":"integer","minimum":0.0,"title":"Hosts","description":"Labelled hosts whose score fell in this band."},"scam_sites":{"type":"integer","minimum":0.0,"title":"Scam Sites","description":"How many of them were scam or compromised sites."},"p_low":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Low","description":"95% interval of the band's scam share, low end (Clopper-Pearson)."},"p_high":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P High","description":"95% interval of the band's scam share, high end."}},"additionalProperties":false,"type":"object","required":["score_from","score_to","hosts","scam_sites","p_low","p_high"],"title":"SiteBand","description":"The score band a site's score fell in, and what the labelled hosts in it turned out to be (1.4.0)."},"SiteCalibration":{"properties":{"schema_version":{"type":"string","title":"Schema Version"},"version":{"type":"string","title":"Version","description":"The fit, e.g. site-cal-20261030-702; `site.calibration` names it."},"fitted_at":{"type":"string","title":"Fitted At","description":"When it was fitted, RFC 3339 UTC."},"population":{"type":"string","title":"Population","description":"Which hosts it applies to."},"labels":{"type":"string","title":"Labels","description":"How the labelled hosts were labelled."},"points":{"type":"integer","minimum":0.0,"title":"Points","description":"Labelled hosts in the fit."},"scam_sites":{"type":"integer","minimum":0.0,"title":"Scam Sites","description":"How many of them were scam or compromised sites."},"confidence":{"type":"number","title":"Confidence","description":"The confidence of every band's interval."},"bands":{"items":{"$ref":"#/components/schemas/CalibrationBand"},"type":"array","title":"Bands"}},"type":"object","required":["schema_version","version","fitted_at","population","labels","points","scam_sites","confidence","bands"],"title":"SiteCalibration","description":"GET /v1/calibration/site (1.4.0): how the domain verdict's score maps to the probability `site.p_scam_site`\nserves, and what each band's labelled hosts were (docs/b2b/PRECISION.md)."},"SiteVerdict":{"properties":{"read_at":{"type":"string","title":"Read At","description":"When our worker read the page, RFC 3339 UTC."},"scam_site":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scam Site","description":"Null: no call is made from the score (a call would need the precision PRECISION.md proves first). Only an operator's `live` mode, not used, sets it."},"p_scam_site":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Scam Site","description":"The calibrated probability that the site is a scam site: the share of labelled hosts in `band` that were, estimated (k + 1/2) / (n + 1) and monotone in the score."},"score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score","description":"The model's raw answer, a ranking score, not a probability."},"band":{"$ref":"#/components/schemas/SiteBand","description":"The score band and its labelled counts and interval."},"calibration":{"type":"string","title":"Calibration","description":"The calibration fit used, e.g. site-cal-20261030-702."},"reasons":{"items":{"type":"string","enum":["impersonates","throwaway_name","claim_vs_age","asks_sensitive","too_good"]},"type":"array","title":"Reasons","description":"When the score is at or above the threshold frozen before the blind test: what the page does, as the model read it (pretends to be an organisation it is not, a throwaway name, claims an established business on a young domain, asks for sensitive details or a payment, too good to be true). Empty otherwise."},"template_hosts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Template Hosts","description":"How many other hosts we read whose page has this page's template (a campaign's sites share one)."},"version":{"type":"string","title":"Version","description":"The verdict's question set, e.g. d2."},"model":{"type":"string","title":"Model","description":"The pinned model that answered, e.g. jev-1.14.0."}},"additionalProperties":false,"type":"object","required":["read_at","p_scam_site","score","band","calibration","reasons","version","model"],"title":"SiteVerdict","description":"Our reading of the site at this host, from a page our own worker read (added 2026-10-28; calibrated 1.4.0).\nJev reads the page together with the domain's facts. Its score ranks scam sites well (AUC 0.915 on a blind round)\nbut is not a probability, so `p_scam_site` is the measured scam share of labelled hosts in the same score band\n(docs/b2b/PRECISION.md, GET /v1/calibration/site). It never changes the entity's verdict."},"UrlFacts":{"properties":{"scheme":{"anyOf":[{"type":"string","enum":["http","https","other"]},{"type":"null"}],"title":"Scheme"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host","description":"Entity id of the link's domain."},"final_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Url","description":"Where the link lands after shorteners and redirects."},"redirect_chain":{"anyOf":[{"items":{"$ref":"#/components/schemas/RedirectHop"},"type":"array"},{"type":"null"}],"title":"Redirect Chain","description":"The short links read on the way, in order."},"shortener":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shortener"},"redirect_resolved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Redirect Resolved"},"short_link":{"anyOf":[{"$ref":"#/components/schemas/ShortLink"},{"type":"null"}],"description":"On a shortener: the link's state as the shortener answers it. Null for a link that is not on a shortener."},"page":{"anyOf":[{"$ref":"#/components/schemas/PageFacts"},{"type":"null"}]},"target_countries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Countries","description":"ISO 3166-1 alpha-2 countries whose people it is aimed at, from the national lists that name it (CERT Polska: PL, Taiwan's 165 line: TW, Germany's regulator: DE, US complaint feeds: US). Empty when no list with a national scope names it."},"list_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Count","description":"How many lists name it (our own and others'); 96% of listed domains are on one list (2026-10-27)."},"platform_status":{"anyOf":[{"$ref":"#/components/schemas/PlatformStatus"},{"type":"null"}],"description":"A form or link-in-bio platform's own answer about this one URL (a Google form, a Linktree profile, a Jotform form). A hosting platform's answer about the whole site is on the host's domain entity."}},"additionalProperties":false,"type":"object","title":"UrlFacts"},"UsageRow":{"properties":{"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"endpoint":{"type":"string","title":"Endpoint"},"credits":{"type":"integer","title":"Credits"},"status":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Status"},"at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"At"}},"type":"object","required":["endpoint","credits","status"],"title":"UsageRow"},"WalletFacts":{"properties":{"chain":{"anyOf":[{"type":"string","enum":["btc","eth","trx","ltc","sol","xmr","dash"]},{"type":"null"}],"title":"Chain","description":"From the address format; eth is any EVM address (the same address exists on every EVM chain)."},"caip2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caip2","description":"CAIP-2 chain id where the chain is fixed (bip122:..., solana:...)."},"listed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Listed"},"sanctioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sanctioned","description":"On a US sanctions list (added 1.1.0)."},"frozen_by_issuer":{"anyOf":[{"items":{"type":"string","enum":["tether","circle"]},"type":"array"},{"type":"null"}],"title":"Frozen By Issuer","description":"Stablecoin issuers whose token contract has this address frozen now (Tether: USDT on Tron and Ethereum; Circle: USDC on Ethereum), read from the contracts' own events; [] when checked and not frozen. Issuers do not publish why (1.9.0)."},"reports":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reports"},"list_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Count","description":"How many lists name it (our own and others'); 96% of listed domains are on one list (2026-10-27)."}},"additionalProperties":false,"type":"object","title":"WalletFacts"},"Watch":{"properties":{"id":{"type":"string","title":"Id","description":"wch_ + a ULID."},"entity":{"$ref":"#/components/schemas/WatchEntity"},"events":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Events","description":"The event types this watch produces."},"status":{"type":"string","enum":["active","paused"],"title":"Status","description":"paused: the balance could not pay a day; a top-up resumes it and produces the gap."},"created_at":{"type":"string","title":"Created At","description":"RFC 3339 UTC."},"paid_until":{"type":"string","title":"Paid Until","description":"Events are produced for changes up to this time. RFC 3339 UTC."},"paused_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused At"},"last_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event At"},"credits_per_day":{"type":"integer","title":"Credits Per Day","description":"What a day of this watch costs (PRICING section 3.1)."}},"type":"object","required":["id","entity","events","status","created_at","paid_until","credits_per_day"],"title":"Watch"},"WatchCreated":{"properties":{"id":{"type":"string","title":"Id","description":"wch_ + a ULID."},"entity":{"$ref":"#/components/schemas/WatchEntity"},"events":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Events","description":"The event types this watch produces."},"status":{"type":"string","enum":["active","paused"],"title":"Status","description":"paused: the balance could not pay a day; a top-up resumes it and produces the gap."},"created_at":{"type":"string","title":"Created At","description":"RFC 3339 UTC."},"paid_until":{"type":"string","title":"Paid Until","description":"Events are produced for changes up to this time. RFC 3339 UTC."},"paused_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused At"},"last_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event At"},"credits_per_day":{"type":"integer","title":"Credits Per Day","description":"What a day of this watch costs (PRICING section 3.1)."},"created":{"type":"boolean","title":"Created","description":"false: a live watch on this entity existed; its event types were updated and nothing was charged."},"credits":{"type":"integer","title":"Credits","description":"Credits charged by this call: the first day of a new watch."}},"type":"object","required":["id","entity","events","status","created_at","paid_until","credits_per_day","created","credits"],"title":"WatchCreated"},"WatchDetail":{"properties":{"id":{"type":"string","title":"Id","description":"wch_ + a ULID."},"entity":{"$ref":"#/components/schemas/WatchEntity"},"events":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Events","description":"The event types this watch produces."},"status":{"type":"string","enum":["active","paused"],"title":"Status","description":"paused: the balance could not pay a day; a top-up resumes it and produces the gap."},"created_at":{"type":"string","title":"Created At","description":"RFC 3339 UTC."},"paid_until":{"type":"string","title":"Paid Until","description":"Events are produced for changes up to this time. RFC 3339 UTC."},"paused_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused At"},"last_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event At"},"credits_per_day":{"type":"integer","title":"Credits Per Day","description":"What a day of this watch costs (PRICING section 3.1)."},"events_30d":{"type":"integer","title":"Events 30D","description":"Events this watch produced in the last 30 days."},"undelivered_30d":{"type":"integer","title":"Undelivered 30D","description":"Of those, events a webhook endpoint could not take after every retry (dead deliveries). They stay in GET /v1/events."},"pending_deliveries":{"type":"integer","title":"Pending Deliveries","description":"Events waiting for a webhook attempt or a retry."}},"type":"object","required":["id","entity","events","status","created_at","paid_until","credits_per_day","events_30d","undelivered_30d","pending_deliveries"],"title":"WatchDetail"},"WatchEntity":{"properties":{"type":{"type":"string","enum":["domain","phone","wallet","brand"],"title":"Type","description":"What is watched: a domain or host, an E.164 phone number, a wallet address, or a brand id of the lookalike registry."},"value":{"type":"string","maxLength":320,"minLength":1,"title":"Value","description":"As in the lookup endpoints. Stored in canonical form (the answer shows it)."}},"additionalProperties":false,"type":"object","required":["type","value"],"title":"WatchEntity"},"WatchIn":{"properties":{"entity":{"$ref":"#/components/schemas/WatchEntity"},"events":{"anyOf":[{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array"},{"type":"null"}],"title":"Events","description":"The event types to produce; omitted or empty: every event type of the entity type."}},"type":"object","required":["entity"],"title":"WatchIn"},"WatchList":{"properties":{"watches":{"items":{"$ref":"#/components/schemas/Watch"},"type":"array","title":"Watches"}},"type":"object","required":["watches"],"title":"WatchList"},"Webhook":{"properties":{"id":{"type":"string","title":"Id","description":"whk_ + a ULID."},"url":{"type":"string","title":"Url"},"event_types":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Event Types","description":"Empty: every event."},"status":{"type":"string","enum":["enabled","disabled"],"title":"Status"},"disabled_reason":{"anyOf":[{"type":"string","enum":["failing","app_disconnected"]},{"type":"null"}],"title":"Disabled Reason","description":"failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on."},"created_at":{"type":"string","title":"Created At"},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Success At"},"last_failure_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Failure At"},"failing_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failing Since","description":"The first failed attempt since the last success."}},"type":"object","required":["id","url","event_types","status","created_at"],"title":"Webhook"},"WebhookCreated":{"properties":{"id":{"type":"string","title":"Id","description":"whk_ + a ULID."},"url":{"type":"string","title":"Url"},"event_types":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Event Types","description":"Empty: every event."},"status":{"type":"string","enum":["enabled","disabled"],"title":"Status"},"disabled_reason":{"anyOf":[{"type":"string","enum":["failing","app_disconnected"]},{"type":"null"}],"title":"Disabled Reason","description":"failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on."},"created_at":{"type":"string","title":"Created At"},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Success At"},"last_failure_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Failure At"},"failing_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failing Since","description":"The first failed attempt since the last success."},"secret":{"type":"string","title":"Secret","description":"whsec_...: signs every delivery (EVENTS.md). Shown once."}},"type":"object","required":["id","url","event_types","status","created_at","secret"],"title":"WebhookCreated"},"WebhookDetail":{"properties":{"id":{"type":"string","title":"Id","description":"whk_ + a ULID."},"url":{"type":"string","title":"Url"},"event_types":{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array","title":"Event Types","description":"Empty: every event."},"status":{"type":"string","enum":["enabled","disabled"],"title":"Status"},"disabled_reason":{"anyOf":[{"type":"string","enum":["failing","app_disconnected"]},{"type":"null"}],"title":"Disabled Reason","description":"failing: every delivery failed for 5 days; app_disconnected: the app that made it over OAuth was disconnected (1.8.0). POST .../enable turns it back on."},"created_at":{"type":"string","title":"Created At"},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Success At"},"last_failure_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Failure At"},"failing_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failing Since","description":"The first failed attempt since the last success."},"deliveries":{"items":{"$ref":"#/components/schemas/Delivery"},"type":"array","title":"Deliveries","description":"The last 50, newest first."}},"type":"object","required":["id","url","event_types","status","created_at","deliveries"],"title":"WebhookDetail"},"WebhookIn":{"properties":{"url":{"type":"string","maxLength":2000,"title":"Url","description":"https only, port 443 or 1024 and up; the host must resolve to public addresses only."},"event_types":{"anyOf":[{"items":{"type":"string","enum":["domain.ip_changed","domain.ns_changed","domain.down","domain.up","domain.parked","domain.listed","domain.delisted","domain.reregistered","domain.expiring","domain.expired","domain.held","phone.listed","phone.delisted","wallet.listed","wallet.delisted","wallet.sanctioned","brand.lookalike_registered","brand.lookalike_cert","brand.lookalike_live"]},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Deliver only these; omitted or empty: every event of the account's watches."}},"type":"object","required":["url"],"title":"WebhookIn"},"WebhookList":{"properties":{"webhooks":{"items":{"$ref":"#/components/schemas/Webhook"},"type":"array","title":"Webhooks"}},"type":"object","required":["webhooks"],"title":"WebhookList"},"BacktestItemIn":{"properties":{"type":{"anyOf":[{"enum":["domain","url","phone","email","wallet"],"type":"string"},{"type":"null"}],"default":null,"description":"Inferred from the value when absent.","title":"Type"},"value":{"maxLength":4000,"title":"Value","type":"string"},"reported_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"When you learned it was bad: RFC 3339 or YYYY-MM-DD (UTC).","title":"Reported At"}},"required":["value"],"title":"BacktestItemIn","type":"object"},"BacktestIn":{"description":"The JSON form of a backtest upload; text/csv and application/x-ndjson carry the same three fields.","properties":{"items":{"items":{"$ref":"#/components/schemas/BacktestItemIn"},"maxItems":10000,"minItems":1,"title":"Items","type":"array"}},"required":["items"],"title":"BacktestIn","type":"object"}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key, bw_…"},"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}}},"security":[{"bearer":[]},{"apiKey":[]},{}]}