{"openapi":"3.1.0","info":{"title":"NoCall Pro Tools API","version":"2026-10-21.v2","description":"44 call, number, SMS, link and directory tools. Call each tool on its named route, POST /v2/<tool>; POST /v2/tools with a tool field is equivalent. Every tool requires an account API key and credits: current Pro or purchased credits. Active Pro includes 20 credits per UTC calendar month, spent first; Free includes 0. Purchased credits (EUR 0.01 (€0.01) each, VAT included, bought on the NoCall account page) never expire. Each successful query costs one credit, including valid negative or not-found results. Validation and provider errors cost zero. Monthly credits do not roll over. Uses the same account balance as /v1/data. ByteGuard is not required on these API-key routes; keys do not bypass web/mobile protections. Errors use {error: {code, message, requestId, details?}}; see the error table in the documentation."},"servers":[{"url":"https://api.nocall.io"}],"security":[{"developerBearer":[]}],"tags":[{"name":"Catalog","description":"The tool catalog; no credit charge."},{"name":"Call & number","description":"17 phone, numbering and call tools."},{"name":"SMS","description":"SMS scam analysis and reporting."},{"name":"Directories","description":"Numbering, operator, calling-code and spam directories."},{"name":"Message & link","description":"Local message and link heuristics."},{"name":"Email & DNS","description":"Public DNS records of a domain (MX, SPF, DMARC, DKIM) and the email address check."},{"name":"Websites","description":"Trust checks of a website's domain: registration age (RDAP), popularity (Majestic Million) and a combined verdict."}],"paths":{"/v2/tools":{"post":{"operationId":"runTool","tags":["Call & number","SMS","Directories","Message & link"],"summary":"Run a tool selected by the JSON tool field (prefer the named route)","description":"Runs the tool named in the body. Every named POST /v2/<tool> route accepts the same body without tool and is the recommended form.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"tool":{"const":"who-calls"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"phone-exposure"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"phone-intelligence"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"phone-risk"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"carrier-lookup"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"verified-business"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"phone-formats"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. An input that cannot be a number of the country is 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"callback-cost"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"prefix-origin"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"number-validator"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. Any phone-like input returns 200; valid=false is a result."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"line-type"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. An input that cannot be a number of the country is 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"premium-rate"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"wangiri"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"commercial-400"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","const":"ES","description":"Spain only: any other country is 422 validation_error."}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"number-research"},"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"language":{"description":"Language code, case-insensitive. zh is Simplified Chinese, zh-Hant Traditional Chinese.","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]}},"required":["tool","phone"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"dial-code"},"code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","description":"Edition whose carrier-specific codes apply (IN: *401*, *99#; US: Verizon *72, *71, *73, *67, *82).","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","code"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"call-scam-check"},"answers":{"type":"object","properties":{"impersonation":{"type":"boolean"},"sms_code":{"type":"boolean"},"remote_access":{"type":"boolean"},"move_money":{"type":"boolean"},"card_or_password":{"type":"boolean"},"pressure":{"type":"boolean"},"dial_code":{"type":"boolean"}},"additionalProperties":false,"description":"One yes/no per question; a missing answer is no. See the call-scam-check questions glossary."},"country":{"default":"ES","description":"Country whose verified reporting channel to return.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","answers"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-check"},"message":{"type":"string","minLength":1,"maxLength":4000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"sender":{"description":"Only its type (numeric, alphanumeric or unknown) reaches the model; never the sender itself.","type":"string","minLength":0,"maxLength":120,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"language":{"description":"Language of `reason`, case-insensitive (zh-Hant: Traditional Chinese).","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]},"country":{"description":"Where the SMS was received. Names the country to the model; without it the prompt assumes no country.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","message"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-brand"},"brand":{"type":"string","enum":["correos","dgt","agencia-tributaria","seguridad-social","bbva","santander","caixabank","dhl","seur","amazon"]},"link":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","const":"ES"}},"required":["tool","brand","link"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-sender"},"sender":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","sender"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-code"},"unrequested":{"type":"boolean"},"asked":{"type":"boolean"},"sensitive":{"type":"boolean"},"shared":{"type":"boolean"}},"required":["tool","unrequested","asked","sensitive","shared"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-report"},"sender":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"received":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"link":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"tapped":{"type":"boolean"},"gaveData":{"type":"boolean"},"country":{"description":"Country whose verified reporting channel to return. Without it, channel is null.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"sms-campaigns"}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"sms-redact"},"message":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"}},"required":["tool","message"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"callback-number"},"text":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","description":"Edition whose national numbers are read from digits typed without + or 00.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","text"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"prefix-directory"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"serviceClass":{"type":"string","enum":["geographic","mobile","personal","toll_free","shared_cost","premium","mass_call","nomadic","m2m","internet","short_code","global_service","other"]},"costClass":{"type":"string","enum":["free","standard","shared","premium","variable","unknown"]},"query":{"type":"string","minLength":1,"maxLength":20},"page":{"default":1,"type":"integer","minimum":1,"maximum":10000},"limit":{"default":50,"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"operator-directory"},"country":{"default":"ES","type":"string","const":"ES"},"operator":{"type":"string","minLength":1,"maxLength":60}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"calling-codes"},"query":{"type":"string","minLength":1,"maxLength":40},"language":{"description":"Language code, case-insensitive. zh is Simplified Chinese, zh-Hant Traditional Chinese.","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"spam-directory"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"category":{"type":"string","enum":["TELEMARKETING","SCAM","DEBT","HARASSMENT","SURVEY","SPAM"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":10000},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"trends"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"smishing"},"message":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","message"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"link-check"},"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","url"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"safety-tools"},"text":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"mode":{"type":"string","enum":["email","message"]},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","text","mode"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"sms-filter"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false,"required":["tool"]},{"type":"object","properties":{"tool":{"const":"qr-check"},"payload":{"type":"string","minLength":1,"maxLength":4296,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The decoded text of the QR code (decode the image on your side)."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","payload"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"email-headers"},"headers":{"type":"string","minLength":1,"maxLength":65536,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The raw header section (\"Show original\"); the body after the first blank line is ignored."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","headers"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"mx-lookup"},"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["tool","domain"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"spf-check"},"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["tool","domain"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"dmarc-check"},"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["tool","domain"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"dkim-check"},"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"selector":{"description":"The selector (the s= tag of a DKIM-Signature header). Without one, about 33 common selectors are tried.","type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"}},"required":["tool","domain"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"email-verify"},"email":{"type":"string","minLength":3,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The address to check. Only its domain is looked up; the address is never stored or returned."}},"required":["tool","email"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"website-age"},"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","url"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"domain-popularity"},"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","url"],"additionalProperties":false},{"type":"object","properties":{"tool":{"const":"website-legit"},"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["tool","url"],"additionalProperties":false}],"description":"The tool field selects the input shape. Prefer the named route POST /v2/<tool>, which takes the same body without tool."},"example":{"tool":"who-calls","phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolSuccess"},"example":{"data":{"tool":"who-calls","result":{"phoneNumber":"+12025550123","found":true,"updatedAt":"2026-10-01T09:30:00.000Z","risk":{"score":72,"level":"high"},"reportCount":14,"categories":["TELEMARKETING"],"verified":false,"carrier":null,"verifiedBusiness":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"get":{"operationId":"listTools","tags":["Catalog"],"summary":"Read the tool catalog and your current usage (no credit charge)","responses":{"200":{"description":"Tool catalog. meta.usage is the caller's current UTC-month balance; meta.unitsCharged is 0.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolCatalog"}}}},"401":{"description":"invalid_api_key","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"authentication_unavailable or beta_unavailable","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/who-calls":{"post":{"operationId":"who-calls","tags":["Call & number"],"summary":"Run who-calls","description":"Community lookup for a number: risk score and level, approved report count, categories, verification, carrier data and a verified business name. found is true only with real data: a block-list entry, a directory entry, approved reports, a verified business or a named operator.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"who-calls"},"result":{"$ref":"#/components/schemas/who-calls"}}}}}]},"example":{"data":{"tool":"who-calls","result":{"phoneNumber":"+12025550123","found":true,"updatedAt":"2026-10-01T09:30:00.000Z","risk":{"score":72,"level":"high"},"reportCount":14,"categories":["TELEMARKETING"],"verified":false,"carrier":null,"verifiedBusiness":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/phone-exposure":{"post":{"operationId":"phone-exposure","tags":["Call & number"],"summary":"Run phone-exposure","description":"Whether the number appears in known data-breach exposure. Boolean only: no breach names or leaked data. Accepts any supported country's E.164 number; the number's own calling code is used.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"phone-exposure"},"result":{"$ref":"#/components/schemas/phone-exposure"}}}}}]},"example":{"data":{"tool":"phone-exposure","result":{"atRisk":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/phone-intelligence":{"post":{"operationId":"phone-intelligence","tags":["Call & number"],"summary":"Run phone-intelligence","description":"Everything who-calls returns, plus the approved comment count (commentCount), the AI risk level when it counts toward the score (aiRiskLevel) and the callback risk of the number's prefix (prefixRisk).","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"phone-intelligence"},"result":{"$ref":"#/components/schemas/phone-intelligence"}}}}}]},"example":{"data":{"tool":"phone-intelligence","result":{"phoneNumber":"+12025550123","found":true,"updatedAt":"2026-10-01T09:30:00.000Z","risk":{"score":72,"level":"high"},"reportCount":14,"categories":["TELEMARKETING"],"verified":false,"carrier":null,"verifiedBusiness":null,"commentCount":3,"aiRiskLevel":"high","prefixRisk":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/phone-risk":{"post":{"operationId":"phone-risk","tags":["Call & number"],"summary":"Run phone-risk","description":"Risk score and level with the signals behind it: approved report count (reportCount), verification and categories.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"phone-risk"},"result":{"$ref":"#/components/schemas/phone-risk"}}}}}]},"example":{"data":{"tool":"phone-risk","result":{"phoneNumber":"+12025550123","found":true,"updatedAt":"2026-10-01T09:30:00.000Z","risk":{"score":72,"level":"high"},"signals":{"reportCount":14,"verified":false,"categories":["TELEMARKETING"]}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/carrier-lookup":{"post":{"operationId":"carrier-lookup","tags":["Call & number"],"summary":"Run carrier-lookup","description":"Assigned operator and numbering data: Spain's CNMC registry, and the regulator numbering data imported for other countries (operator, number type, prefix, region, cost category). found is true only when an operator is named.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"carrier-lookup"},"result":{"$ref":"#/components/schemas/carrier-lookup"}}}}}]},"example":{"data":{"tool":"carrier-lookup","result":{"phoneNumber":"+12025550123","found":false,"updatedAt":null,"carrier":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/verified-business":{"post":{"operationId":"verified-business","tags":["Call & number"],"summary":"Run verified-business","description":"The verified business that owns the number, when one is verified; otherwise verifiedBusiness is null.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"verified-business"},"result":{"$ref":"#/components/schemas/verified-business"}}}}}]},"example":{"data":{"tool":"verified-business","result":{"phoneNumber":"+12025550123","found":true,"updatedAt":"2026-10-01T09:30:00.000Z","verifiedBusiness":{"name":"Example Clinic","verified":true}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/phone-formats":{"post":{"operationId":"phone-formats","tags":["Call & number"],"summary":"Run phone-formats","description":"E.164, national and international formats, calling code, country and validity from the numbering plan. An input that cannot be a number of the country (unparseable, impossible length) is 422 invalid_phone; a possible but unallocated number returns valid=false.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. An input that cannot be a number of the country is 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+34912345678","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"phone-formats"},"result":{"$ref":"#/components/schemas/phone-formats"}}}}}]},"example":{"data":{"tool":"phone-formats","result":{"e164":"+34912345678","national":"912 34 56 78","international":"+34 912 34 56 78","callingCode":"34","country":"ES","valid":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/callback-cost":{"post":{"operationId":"callback-cost","tags":["Call & number"],"summary":"Run callback-cost","description":"Cost tier of calling the number back (premium, shared cost, free, international, satellite, wangiri, …), the matching registry range, and the calling code of an international number.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"806123456","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"callback-cost"},"result":{"$ref":"#/components/schemas/callback-cost"}}}}}]},"example":{"data":{"tool":"callback-cost","result":{"tier":"premium","scope":"national","callingCode":null,"registry":{"prefix":"806","serviceClass":"premium","costClass":"premium","geography":null,"indexable":true}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/prefix-origin":{"post":{"operationId":"prefix-origin","tags":["Call & number"],"summary":"Run prefix-origin","description":"Where a prefix or number belongs: an exact numbering range, up to 8 suggestions, another country (foreignCode is its calling code), or no match.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"910","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"prefix-origin"},"result":{"$ref":"#/components/schemas/prefix-origin"}}}}}]},"example":{"data":{"tool":"prefix-origin","result":{"kind":"match","national":"910","row":{"prefix":"910","serviceClass":"geographic","costClass":"standard","geography":"Madrid","indexable":true},"complete":false,"planLoaded":true,"numberType":null,"foreignCode":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/number-validator":{"post":{"operationId":"number-validator","tags":["Call & number"],"summary":"Run number-validator","description":"Numbering-plan validity, possibility, type, country, calling code and E.164. Any phone-like input is a successful result: valid=false is returned (and charged), never 422.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. Any phone-like input returns 200; valid=false is a result."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"number-validator"},"result":{"$ref":"#/components/schemas/number-validator"}}}}}]},"example":{"data":{"tool":"number-validator","result":{"valid":true,"possible":true,"country":"US","callingCode":"1","type":"fixed_line_or_mobile","e164":"+12025550123"}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/line-type":{"post":{"operationId":"line-type","tags":["Call & number"],"summary":"Run line-type","description":"Mobile, landline, either, special, VoIP or unknown (lineKind), with the plan type and validity. An input that cannot be a number of the country (unparseable, impossible length) is 422 invalid_phone; a possible but unallocated number returns valid=false and lineKind unknown.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number: E.164 with + or 00, or national digits for country. An input that cannot be a number of the country is 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+34600111222","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"line-type"},"result":{"$ref":"#/components/schemas/line-type"}}}}}]},"example":{"data":{"tool":"line-type","result":{"e164":"+34600111222","valid":true,"type":"mobile","lineKind":"mobile"}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/premium-rate":{"post":{"operationId":"premium-rate","tags":["Call & number"],"summary":"Run premium-rate","description":"Premium-rate category of a number or prefix, the risk of calling it back (callbackRisk) and which source decided it.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"806","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"premium-rate"},"result":{"$ref":"#/components/schemas/premium-rate"}}}}}]},"example":{"data":{"tool":"premium-rate","result":{"category":"premium","prefix":"806","callingCode":null,"source":"spain_plan","callbackRisk":"high"}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/wangiri":{"post":{"operationId":"wangiri","tags":["Call & number"],"summary":"Run wangiri","description":"Whether the calling code is on the wangiri (one-ring callback scam) list, Caribbean NANP, satellite, domestic or not listed.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+216","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"wangiri"},"result":{"$ref":"#/components/schemas/wangiri"}}}}}]},"example":{"data":{"tool":"wangiri","result":{"verdict":"listed","code":"216","nanpArea":null,"entry":{"code":"216","name":"Tunisia","territories":["TN"]}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/commercial-400":{"post":{"operationId":"commercial-400","tags":["Call & number"],"summary":"Run commercial-400","description":"Classifies a Spanish number as a 400 commercial line, mobile, geographic, free, special cost, short or foreign. ES only: another country is 422 validation_error.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A full number (E.164 with + or 00, or national digits for country) or a prefix such as 806 or +216."},"country":{"default":"ES","type":"string","const":"ES","description":"Spain only: any other country is 422 validation_error."}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+34400000000","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"commercial-400"},"result":{"$ref":"#/components/schemas/commercial-400"}}}}}]},"example":{"data":{"tool":"commercial-400","result":{"verdict":"commercial_400","prefix":"400"}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/number-research":{"post":{"operationId":"number-research","tags":["Call & number"],"summary":"Run number-research","description":"AI web research summary for the number with its sources, cached 30 days per number and language. The only phone tool that takes language.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"maxLength":40,"description":"A complete number valid for its country: E.164 with + or 00, or national digits for country. Prefixes are 422 invalid_phone."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"language":{"description":"Language code, case-insensitive. zh is Simplified Chinese, zh-Hant Traditional Chinese.","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]}},"required":["phone"],"additionalProperties":false},"example":{"phone":"+12025550123","country":"US","language":"en"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"number-research"},"result":{"$ref":"#/components/schemas/number-research"}}}}}]},"example":{"data":{"tool":"number-research","result":{"answer":"No public business or report is associated with this number in the sources reviewed.","sources":[],"countryCode":"US","language":"en","cached":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/dial-code":{"post":{"operationId":"dial-code","tags":["Call & number"],"summary":"Run dial-code","description":"What a code someone asks you to dial does: call forwarding (and where to), barring, call waiting, caller ID or a carrier service (3GPP TS 22.030 plus verified carrier codes in IN and US), with its risk and the code that undoes it. Barring passwords are masked.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","description":"Edition whose carrier-specific codes apply (IN: *401*, *99#; US: Verizon *72, *71, *73, *67, *82).","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["code"],"additionalProperties":false},"example":{"code":"**21*+34600000000#","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"dial-code"},"result":{"$ref":"#/components/schemas/dial-code"}}}}}]},"example":{"data":{"tool":"dial-code","result":{"code":"**21*+34600000000#","kind":"call_forwarding","action":"register","service":"unconditional","forwardsTo":"+34600000000","calls":null,"risk":"high","undo":"##002#","operator":null}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/call-scam-check":{"post":{"operationId":"call-scam-check","tags":["Call & number"],"summary":"Run call-scam-check","description":"Seven yes/no answers about a call that just happened (who they claimed to be, a request for an SMS code, remote access, money, card details or a code to dial, and pressure) give a verdict, the steps to take now and the country's verified reporting channel.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"answers":{"type":"object","properties":{"impersonation":{"type":"boolean"},"sms_code":{"type":"boolean"},"remote_access":{"type":"boolean"},"move_money":{"type":"boolean"},"card_or_password":{"type":"boolean"},"pressure":{"type":"boolean"},"dial_code":{"type":"boolean"}},"additionalProperties":false,"description":"One yes/no per question; a missing answer is no. See the call-scam-check questions glossary."},"country":{"default":"ES","description":"Country whose verified reporting channel to return.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["answers"],"additionalProperties":false},"example":{"answers":{"impersonation":true,"sms_code":true,"pressure":true},"country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"call-scam-check"},"result":{"$ref":"#/components/schemas/call-scam-check"}}}}}]},"example":{"data":{"tool":"call-scam-check","result":{"verdict":"scam","signals":["impersonation","sms_code","pressure"],"actions":["hang_up","call_official_number","never_share_codes","report"],"reportChannel":{"name":"INCIBE","fullName":"Instituto Nacional de Ciberseguridad de España","url":"https://www.incibe.es/linea-de-ayuda-en-ciberseguridad","phone":"017"}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-check":{"post":{"operationId":"sms-check","tags":["SMS"],"summary":"Run sms-check","description":"AI analysis of one SMS: allow or suspicious, with the model's confidence in that verdict (0–100) and a short reason in language. Only the redacted text, derived features, the sender type, the optional country and the language reach the model. A busy AI is 429 ai_busy, never charged.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":4000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"sender":{"description":"Only its type (numeric, alphanumeric or unknown) reaches the model; never the sender itself.","type":"string","minLength":0,"maxLength":120,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"language":{"description":"Language of `reason`, case-insensitive (zh-Hant: Traditional Chinese).","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]},"country":{"description":"Where the SMS was received. Names the country to the model; without it the prompt assumes no country.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["message"],"additionalProperties":false},"example":{"message":"Your parcel is held. Pay the fee at https://example.invalid/pay","sender":"Correos","language":"en","country":"GB"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-check"},"result":{"$ref":"#/components/schemas/sms-check"}}}}}]},"example":{"data":{"tool":"sms-check","result":{"verdict":"suspicious","confidence":80,"reason":"Unexpected payment request with a link."}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-brand":{"post":{"operationId":"sms-brand","tags":["SMS"],"summary":"Run sms-brand","description":"Whether a link really belongs to the Spanish brand it claims (official, unconfirmed, lookalike, shortener, other). sightings counts every eligible community campaign for the brand, not only the public top 10. ES only.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","enum":["correos","dgt","agencia-tributaria","seguridad-social","bbva","santander","caixabank","dhl","seur","amazon"]},"link":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","const":"ES"}},"required":["brand","link"],"additionalProperties":false},"example":{"brand":"correos","link":"https://correos-envio.example.invalid/pago","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-brand"},"result":{"$ref":"#/components/schemas/sms-brand"}}}}}]},"example":{"data":{"tool":"sms-brand","result":{"verdict":"lookalike","host":"correos-envio.example.invalid","brand":{"slug":"correos","name":"Correos","category":"delivery"},"officialDomains":["correos.es","correos.com","correosexpress.com"],"sightings":0}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-sender":{"post":{"operationId":"sms-sender","tags":["SMS"],"summary":"Run sms-sender","description":"Classifies an SMS sender: known brand name, other name (and lookalike), short code, national or international number.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sender":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["sender"],"additionalProperties":false},"example":{"sender":"Correos","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-sender"},"result":{"$ref":"#/components/schemas/sms-sender"}}}}}]},"example":{"data":{"tool":"sms-sender","result":{"kind":"brandName","tooLong":false,"brand":{"name":"Correos","keys":["correos"],"officialDomains":["correos.es","correos.com","correosexpress.com"]}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-code":{"post":{"operationId":"sms-code","tags":["SMS"],"summary":"Run sms-code","description":"What to do about a verification code you received, from four yes/no answers. Returns a verdict, its severity and stable step codes (never_give_payment_codes last for a WhatsApp, bank or payment-app code).","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"unrequested":{"type":"boolean"},"asked":{"type":"boolean"},"sensitive":{"type":"boolean"},"shared":{"type":"boolean"}},"required":["unrequested","asked","sensitive","shared"],"additionalProperties":false},"example":{"unrequested":true,"asked":true,"sensitive":true,"shared":false}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-code"},"result":{"$ref":"#/components/schemas/sms-code"}}}}}]},"example":{"data":{"tool":"sms-code","result":{"verdict":"asked","severity":"high","serviceRecoverySteps":false,"stepCodes":["do_not_share_code","stop_and_block_contact","call_known_contact","report_number","never_give_payment_codes"]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-report":{"post":{"operationId":"sms-report","tags":["SMS"],"summary":"Run sms-report","description":"Steps to report a scam SMS, with the report fields tidied for copying. With country, channel is that country's verified reporting body (verified is true); without one, or with no verified body, channel is null and verified false.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sender":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"received":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"link":{"type":"string","minLength":0,"maxLength":200,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"tapped":{"type":"boolean"},"gaveData":{"type":"boolean"},"country":{"description":"Country whose verified reporting channel to return. Without it, channel is null.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false},"example":{"sender":"Correos","tapped":false,"gaveData":false,"country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-report"},"result":{"$ref":"#/components/schemas/sms-report"}}}}}]},"example":{"data":{"tool":"sms-report","result":{"channel":{"name":"INCIBE","fullName":"Instituto Nacional de Ciberseguridad de España","url":"https://www.incibe.es/linea-de-ayuda-en-ciberseguridad","phone":"017"},"verified":true,"stepCodes":["contact_bank","change_passwords","tell_operator","report_number","keep_screenshot"],"reportFields":{"sender":"Correos","received":null,"link":null,"tapped":false,"gaveData":false}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-campaigns":{"post":{"operationId":"sms-campaigns","tags":["SMS"],"summary":"Run sms-campaigns","description":"Public aggregate of SMS scam campaigns: totals and the top brands (with their sms-brand slug or null) and domains, recomputed at most every 10 minutes. Never sender or message text.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false},"example":{}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-campaigns"},"result":{"$ref":"#/components/schemas/sms-campaigns"}}}}}]},"example":{"data":{"tool":"sms-campaigns","result":{"totalCampaigns":0,"totalSightings":0,"topBrands":[],"topDomains":[]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-redact":{"post":{"operationId":"sms-redact","tags":["SMS"],"summary":"Run sms-redact","description":"Removes personal data from a message before it is shared: links, emails, IBANs, cards with CVV and expiry, ID numbers, phone numbers and codes become placeholders, with a count per kind. Nothing is stored.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"}},"required":["message"],"additionalProperties":false},"example":{"message":"BBVA: su tarjeta 4111 1111 1111 1111 ha sido bloqueada. Llame al +34 612 34 56 78 o entre en https://bbva-seguro.com/login"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-redact"},"result":{"$ref":"#/components/schemas/sms-redact"}}}}}]},"example":{"data":{"tool":"sms-redact","result":{"text":"BBVA: su tarjeta [CARD] ha sido bloqueada. Llame al [PHONE] o entre en [URL]","counts":{"url":1,"email":0,"iban":0,"card":1,"cvv":0,"expiry":0,"id":0,"phone":1,"code":0},"total":3}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/callback-number":{"post":{"operationId":"callback-number","tags":["SMS"],"summary":"Run callback-number","description":"Every valid phone number in a pasted SMS, email or letter (up to 10), with its type, what calling it costs, whether it is foreign and its wangiri verdict, plus signals such as a request to call or a forwarding code. Nothing is stored.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","description":"Edition whose national numbers are read from digits typed without + or 00.","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["text"],"additionalProperties":false},"example":{"text":"Your account is locked. Call us now on 0909 879 0000 or +216 71 123 456","country":"GB"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"callback-number"},"result":{"$ref":"#/components/schemas/callback-number"}}}}}]},"example":{"data":{"tool":"callback-number","result":{"numbers":[{"e164":"+449098790000","country":"GB","type":"premium_rate","category":"premium","risk":"high","international":false,"wangiri":null},{"e164":"+21671123456","country":"TN","type":"fixed_line","category":"wangiri","risk":"high","international":true,"wangiri":"listed"}],"signals":["asks_to_call","premium_number","wangiri_country","international_number"],"attention":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/prefix-directory":{"post":{"operationId":"prefix-directory","tags":["Directories"],"summary":"Run prefix-directory","description":"Published numbering ranges of a country, filterable by service class, cost class and prefix, paginated (total, page, limit, hasMore). 52 of the 56 countries: FR, DK, HK and SG have no published plan and are 422 invalid_input (details[0].code no_numbering_plan); CA returns the shared NANP plan, the same ranges as US.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"serviceClass":{"type":"string","enum":["geographic","mobile","personal","toll_free","shared_cost","premium","mass_call","nomadic","m2m","internet","short_code","global_service","other"]},"costClass":{"type":"string","enum":["free","standard","shared","premium","variable","unknown"]},"query":{"type":"string","minLength":1,"maxLength":20},"page":{"default":1,"type":"integer","minimum":1,"maximum":10000},"limit":{"default":50,"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},"example":{"country":"ES","serviceClass":"premium","page":1,"limit":3}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"prefix-directory"},"result":{"$ref":"#/components/schemas/prefix-directory"}}}}}]},"example":{"data":{"tool":"prefix-directory","result":{"countryCode":"ES","callingCode":"34","planVersion":"ES-2021-02-18.review-2026-08-09","total":3,"page":1,"limit":3,"hasMore":false,"rows":[{"prefix":"803","serviceClass":"premium","costClass":"premium","geography":null,"indexable":true,"source":"es-ministry-pnn-2021-02-18"},{"prefix":"806","serviceClass":"premium","costClass":"premium","geography":null,"indexable":true,"source":"es-ministry-pnn-2021-02-18"},{"prefix":"807","serviceClass":"premium","costClass":"premium","geography":null,"indexable":true,"source":"es-ministry-pnn-2021-02-18"}]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/operator-directory":{"post":{"operationId":"operator-directory","tags":["Directories"],"summary":"Run operator-directory","description":"Spanish operators (CNMC) with their 3-digit prefixes, number type and spam count (null when the count could not be computed), plus special prefixes. ES only. An unknown operator is 422 invalid_input (unknown_operator).","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"default":"ES","type":"string","const":"ES"},"operator":{"type":"string","minLength":1,"maxLength":60}},"additionalProperties":false},"example":{"country":"ES","operator":"Movistar"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"operator-directory"},"result":{"$ref":"#/components/schemas/operator-directory"}}}}}]},"example":{"data":{"tool":"operator-directory","result":{"operators":[{"name":"Movistar","prefixes":["609","619"],"numberType":"mobile","spamCount":0}],"specialPrefixes":[{"prefix":"400","name":"Llamadas comerciales","type":"commercial","cost":"no_callback","risk":"medium"},{"prefix":"800","name":"Llamada gratuita","type":"toll_free","cost":"free","risk":"low"},{"prefix":"900","name":"Llamada gratuita","type":"toll_free","cost":"free","risk":"low"},{"prefix":"901","name":"Coste compartido","type":"premium","cost":"shared","risk":"medium"},{"prefix":"902","name":"Coste extra","type":"premium","cost":"expensive","risk":"high"},{"prefix":"903","name":"Teléfono premium","type":"premium","cost":"very_expensive","risk":"critical"},{"prefix":"905","name":"Televoto","type":"premium","cost":"very_expensive","risk":"critical"},{"prefix":"906","name":"Teléfono premium","type":"premium","cost":"very_expensive","risk":"critical"},{"prefix":"907","name":"VoIP España","type":"premium","cost":"expensive","risk":"high"},{"prefix":"908","name":"VoIP España","type":"premium","cost":"expensive","risk":"high"},{"prefix":"909","name":"VoIP España","type":"premium","cost":"expensive","risk":"high"},{"prefix":"803","name":"Servicios para adultos","type":"premium","cost":"very_expensive","risk":"critical"},{"prefix":"806","name":"Entretenimiento","type":"premium","cost":"very_expensive","risk":"high"},{"prefix":"807","name":"Servicios profesionales","type":"premium","cost":"very_expensive","risk":"high"},{"prefix":"704","name":"Número personal","type":"premium","cost":"expensive","risk":"medium"}]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/calling-codes":{"post":{"operationId":"calling-codes","tags":["Directories"],"summary":"Run calling-codes","description":"Search the ITU international calling codes by name, ISO code or dial code. Names are translated into language when every territory of the code has an ISO code; exact dial-code and ISO matches come first.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":40},"language":{"description":"Language code, case-insensitive. zh is Simplified Chinese, zh-Hant Traditional Chinese.","default":"en","type":"string","enum":["es","en","fr","de","it","pt","nl","sv","no","da","fi","el","pl","cs","sk","sl","hu","ro","ru","uk","tr","ar","fa","he","hi","ur","ja","ko","zh","zh-Hant","th","id","tl"]}},"additionalProperties":false},"example":{"query":"216","language":"en"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"calling-codes"},"result":{"$ref":"#/components/schemas/calling-codes"}}}}}]},"example":{"data":{"tool":"calling-codes","result":{"rows":[{"code":"216","name":"Tunisia","territories":["Tunisia"],"source":"itu-e164-nnp-2026-08-09"}],"total":1}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/spam-directory":{"post":{"operationId":"spam-directory","tags":["Directories"],"summary":"Run spam-directory","description":"Public spam statistics for a country (view summary: totals, categories, top 20 approved-report numbers; page and limit ignored), or one category's publicly listed numbers (view category, paginated: total, page, limit, hasMore). page × limit is capped at 100,000 rows for a category. A cold cache is 503 tool_warming.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]},"category":{"type":"string","enum":["TELEMARKETING","SCAM","DEBT","HARASSMENT","SURVEY","SPAM"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":10000},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"example":{"country":"US","category":"SCAM","page":1,"limit":20}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"spam-directory"},"result":{"$ref":"#/components/schemas/spam-directory"}}}}}]},"example":{"data":{"tool":"spam-directory","result":{"view":"category","category":"SCAM","total":2,"page":1,"limit":20,"hasMore":false,"rows":[{"phoneNumber":"+15555550123","category":"SCAM","reportCount":4},{"phoneNumber":"+15555550142","category":"SCAM","reportCount":2}]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/trends":{"post":{"operationId":"trends","tags":["Directories"],"summary":"Run trends","description":"Detailed country aggregates: totals, 24 h activity, categories, phone types (ES only, [] elsewhere), prefixes, search trends, regions, impersonated companies and AI breakdowns. topOperators appears only for ES while the operator breakdown is enabled. No phone numbers. A cold country is 503 tool_warming.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","CA","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false},"example":{"country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"trends"},"result":{"$ref":"#/components/schemas/trends"}}}}}]},"example":{"data":{"tool":"trends","result":{"totals":{"blockedNumbers":0,"reports":0,"comments":0,"aiAnalyzed":0},"activity24h":{"blockedNumbers":0,"reports":0,"comments":0},"verification":{"verifiedBlocked":0,"unverifiedBlocked":0},"freshness":{"blockedNumbers":null,"reports":null,"comments":null,"aiAnalyzed":null},"categoryDistribution":[],"phoneTypes":[],"growthTimeline":[],"topPrefixes":[],"searchTrends":[],"communityDistribution":[],"impersonationRanking":[],"aiBreakdown":{"dangerLevels":[],"sectors":[],"tactics":[],"purposes":[]}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/smishing":{"post":{"operationId":"smishing","tags":["Message & link"],"summary":"Run smishing","description":"Local rule-engine check of one SMS: scam, suspicious or likely safe, with the integer score behind it (≥ 4 scam, 2–3 suspicious, 0–1 likely safe), signals, hosts, link flags and the named brand with its sms-brand slug.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["message"],"additionalProperties":false},"example":{"message":"CORREOS: su paquete está retenido. Pague urgente las tasas en https://correos-entrega.info/pago","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"smishing"},"result":{"$ref":"#/components/schemas/smishing"}}}}}]},"example":{"data":{"tool":"smishing","result":{"verdict":"scam","score":9,"attention":true,"signals":["suspicious_domain","risky_tld","urgency","brand_impersonation","delivery_lure"],"hosts":["correos-entrega.info"],"linkFlags":[],"brand":"correos","brandSlug":"correos"}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/link-check":{"post":{"operationId":"link-check","tags":["Message & link"],"summary":"Run link-check","description":"Static inspection of one URL: host in Unicode and ASCII, whether it is an official brand or government domain (and whose), structural link flags and rule-engine signals. No fetch, redirect following or reputation lookup.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["url"],"additionalProperties":false},"example":{"url":"http://192.168.1.1/login","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"link-check"},"result":{"$ref":"#/components/schemas/link-check"}}}}}]},"example":{"data":{"tool":"link-check","result":{"host":"192.168.1.1","hostAscii":"192.168.1.1","official":false,"brand":null,"hosts":["192.168.1.1"],"linkFlags":["http","ipAddress"],"signals":["suspicious_domain"],"attention":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/safety-tools":{"post":{"operationId":"safety-tools","tags":["Message & link"],"summary":"Run safety-tools","description":"The same rule engine on a pasted email or message: attention, signals, hosts and link flags. Never a safe verdict.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"},"mode":{"type":"string","enum":["email","message"]},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["text","mode"],"additionalProperties":false},"example":{"text":"URGENTE: su cuenta BBVA ha sido bloqueada, verifique en https://bbva-seguro.com/login","mode":"email","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"safety-tools"},"result":{"$ref":"#/components/schemas/safety-tools"}}}}}]},"example":{"data":{"tool":"safety-tools","result":{"attention":true,"signals":["suspicious_domain","urgency","brand_impersonation"],"hosts":["bbva-seguro.com"],"linkFlags":[]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/sms-filter":{"post":{"operationId":"sms-filter","tags":["Message & link"],"summary":"Run sms-filter","description":"Version, source and rule counts of the country's \"Base NoCall\" SMS filter rules. Counts only, never the lists.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"additionalProperties":false},"example":{"country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"sms-filter"},"result":{"$ref":"#/components/schemas/sms-filter"}}}}}]},"example":{"data":{"tool":"sms-filter","result":{"country":"ES","version":"2026-03-10","updatedAt":"2026-03-10T00:00:00.000Z","source":"default","counts":{"riskKeywords":27,"brandKeywords":13,"trustedDomains":20,"shortenerDomains":10,"blockedKeywords":0}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/qr-check":{"post":{"operationId":"qr-check","tags":["Message & link"],"summary":"Run qr-check","description":"What a decoded QR code really does: opens a link (checked with the country rules), calls or texts a number (classified with premium-rate), writes an email, joins Wi-Fi, saves a contact, or asks for a payment (SEPA, Swiss QR-bill, UPI, Pix and EMVCo schemes, with IBAN and CRC checks) or crypto. The link is never opened.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payload":{"type":"string","minLength":1,"maxLength":4296,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The decoded text of the QR code (decode the image on your side)."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["payload"],"additionalProperties":false},"example":{"payload":"BCD\n002\n1\nSCT\n\nAparcamientos Ejemplo SL\nES9121000418450200051332\nEUR49.90\n\n\nMulta de aparcamiento 4471","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"qr-check"},"result":{"$ref":"#/components/schemas/qr-check"}}}}}]},"example":{"data":{"tool":"qr-check","result":{"payload":{"type":"payment","scheme":"epc","payee":"Aparcamientos Ejemplo SL","account":"ES9121000418450200051332","accountValid":true,"amount":"49.90","currency":"EUR","reference":"Multa de aparcamiento 4471","country":"ES","city":null,"crcValid":null},"signals":["payment_request","amount_prefilled"],"attention":true,"hosts":[],"linkFlags":[],"link":null,"numbers":[]}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/email-headers":{"post":{"operationId":"email-headers","tags":["Message & link"],"summary":"Run email-headers","description":"Whether the receiving provider authenticated an email (SPF, DKIM and DMARC from the topmost Authentication-Results, with relaxed alignment) and the sender tells: a brand in the display name, free-mail or look-alike domains, replies to another domain. Domains only; nothing is stored.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"string","minLength":1,"maxLength":65536,"pattern":"^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The raw header section (\"Show original\"); the body after the first blank line is ignored."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["headers"],"additionalProperties":false},"example":{"headers":"Delivered-To: user@example.com\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <user@example.com>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass header.i=@bank.example header.s=s1; spf=pass (google.com: domain of alerts@bank.example designates 192.0.2.10 as permitted sender) smtp.mailfrom=alerts@bank.example; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <alerts@bank.example>\nReply-To: help@other.example\nSubject: Your statement is ready\nMessage-ID: <abc@bank.example>","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"email-headers"},"result":{"$ref":"#/components/schemas/email-headers"}}}}}]},"example":{"data":{"tool":"email-headers","result":{"fromDomain":"bank.example","fromDomainAscii":"bank.example","displayName":"Bank Alerts","replyToDomain":"other.example","returnPathDomain":null,"senderDomain":null,"subject":"Your statement is ready","auth":{"provider":"mx.google.com","source":"authentication_results","spf":"pass","spfDomain":"bank.example","dkim":"pass","dkimDomains":["bank.example"],"dmarc":"pass","dmarcDomain":"bank.example","compauth":null,"aligned":true},"authenticated":true,"brand":null,"official":false,"freeMail":false,"signals":["reply_to_mismatch"],"attention":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/mx-lookup":{"post":{"operationId":"mx-lookup","tags":["Email & DNS"],"summary":"Run mx-lookup","description":"The MX hosts of a domain (or of an email address or link), whether it receives mail at all (null MX, implicit MX) and who runs its mail servers. Public DNS only; no address record is returned.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["domain"],"additionalProperties":false},"example":{"domain":"example.com"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"mx-lookup"},"result":{"$ref":"#/components/schemas/mx-lookup"}}}}}]},"example":{"data":{"tool":"mx-lookup","result":{"domain":"example.com","domainAscii":"example.com","found":true,"records":[{"priority":1,"host":"aspmx.l.google.com"},{"priority":5,"host":"alt1.aspmx.l.google.com"}],"nullMx":false,"implicitMx":false,"acceptsMail":true,"provider":"google","signals":[],"attention":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/spf-check":{"post":{"operationId":"spf-check","tags":["Email & DNS"],"summary":"Run spf-check","description":"The SPF record of a domain: its terms, what it does with every other sender (its all), and its DNS lookups across the whole include tree against the limit of 10, with every include and redirect target checked.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["domain"],"additionalProperties":false},"example":{"domain":"example.com"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"spf-check"},"result":{"$ref":"#/components/schemas/spf-check"}}}}}]},"example":{"data":{"tool":"spf-check","result":{"domain":"example.com","domainAscii":"example.com","found":true,"record":"v=spf1 include:_spf.google.com ~all","recordCount":1,"terms":[{"qualifier":"pass","mechanism":"include","value":"_spf.google.com"},{"qualifier":"softfail","mechanism":"all","value":null}],"allResult":"softfail","lookups":1,"includes":[{"domain":"_spf.google.com","found":true}],"signals":["softfail_all"],"valid":true,"attention":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/dmarc-check":{"post":{"operationId":"dmarc-check","tags":["Email & DNS"],"summary":"Run dmarc-check","description":"The DMARC record that applies to a domain (its own or, by the DMARCbis tree walk, a parent's): policy, subdomain policy, percentage, alignment and the domains that receive its reports.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."}},"required":["domain"],"additionalProperties":false},"example":{"domain":"example.com"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"dmarc-check"},"result":{"$ref":"#/components/schemas/dmarc-check"}}}}}]},"example":{"data":{"tool":"dmarc-check","result":{"domain":"example.com","domainAscii":"example.com","found":true,"record":"v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com","foundAt":"example.com","inherited":false,"policy":"none","subdomainPolicy":null,"effectivePolicy":"none","percentage":100,"alignment":{"dkim":"relaxed","spf":"relaxed"},"reports":{"aggregate":["example.com"],"failure":[]},"signals":["policy_none"],"valid":true,"attention":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/dkim-check":{"post":{"operationId":"dkim-check","tags":["Email & DNS"],"summary":"Run dkim-check","description":"The DKIM key at a selector, or at about 33 common selectors when none is given: key type and size, testing and revoked flags. A selector not found does not prove the domain has no DKIM.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A domain, or an email address or link whose domain is used. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"selector":{"description":"The selector (the s= tag of a DKIM-Signature header). Without one, about 33 common selectors are tried.","type":"string","minLength":1,"maxLength":120,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$"}},"required":["domain"],"additionalProperties":false},"example":{"domain":"example.com","selector":"s1"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"dkim-check"},"result":{"$ref":"#/components/schemas/dkim-check"}}}}}]},"example":{"data":{"tool":"dkim-check","result":{"domain":"example.com","domainAscii":"example.com","selectorGiven":true,"selectorsTried":1,"keys":[{"selector":"s1","keyType":"rsa","keyBits":2048,"testing":false,"revoked":false,"valid":true,"signals":[]}],"signals":[],"attention":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/email-verify":{"post":{"operationId":"email-verify","tags":["Email & DNS"],"summary":"Run email-verify","description":"What can be known about an email address without contacting its mail server: syntax, whether its domain receives mail, and whether it is a disposable, role or free-mail address, with a suggestion for a mistyped provider. The mailbox itself is not probed and nothing is stored.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","minLength":3,"maxLength":320,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"The address to check. Only its domain is looked up; the address is never stored or returned."}},"required":["email"],"additionalProperties":false},"example":{"email":"maria@outlok.com"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"email-verify"},"result":{"$ref":"#/components/schemas/email-verify"}}}}}]},"example":{"data":{"tool":"email-verify","result":{"domain":"outlok.com","domainAscii":"outlok.com","status":"domain_not_found","syntaxValid":true,"acceptsMail":false,"mx":{"count":0,"provider":null,"implicit":false,"nullMx":false},"disposable":false,"role":false,"freeMail":false,"suggestion":"outlook.com","signals":["domain_not_found","typo_domain"],"attention":true}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/website-age":{"post":{"operationId":"website-age","tags":["Websites"],"summary":"Run website-age","description":"When the domain of a link, host or email address was registered, last changed and expires, its registrar and status, from the registry's RDAP service, with the public SMS scam campaigns that link to it. Only the domain is sent, and only to the registry; the link is never opened. A registry without RDAP (.es, .de, .it…) is a normal result with rdapAvailable false.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["url"],"additionalProperties":false},"example":{"url":"https://www.example.com/login","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"website-age"},"result":{"$ref":"#/components/schemas/website-age"}}}}}]},"example":{"data":{"tool":"website-age","result":{"domain":"example.com","domainAscii":"example.com","rdapAvailable":true,"found":true,"registeredDomain":"example.com","registered":"1995-08-14","updated":"2026-08-14","expires":"2027-08-13","ageDays":11398,"registrar":"RESERVED-Internet Assigned Numbers Authority","status":["client delete prohibited","client transfer prohibited","client update prohibited"],"campaigns":{"count":0,"lastSeen":null},"signals":[],"attention":false}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/domain-popularity":{"post":{"operationId":"domain-popularity","tags":["Websites"],"summary":"Run domain-popularity","description":"The rank of the domain, or of its closest listed parent, in the Majestic Million (the million most linked-to domains, CC BY 3.0), with its referring subnets and IPs. Most legitimate sites are not ranked; a rank is a hint, not proof.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["url"],"additionalProperties":false},"example":{"url":"https://shop.example.com/cart","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"domain-popularity"},"result":{"$ref":"#/components/schemas/domain-popularity"}}}}}]},"example":{"data":{"tool":"domain-popularity","result":{"domain":"shop.example.com","domainAscii":"shop.example.com","ranked":true,"rank":1043,"rankedDomain":"example.com","refSubnets":48211,"refIps":81233,"listSize":1000000,"updated":"2026-10-26","source":{"name":"Majestic Million","url":"https://majestic.com/reports/majestic-million","license":"CC BY 3.0","licenseUrl":"https://creativecommons.org/licenses/by/3.0/"}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/website-legit":{"post":{"operationId":"website-legit","tags":["Websites"],"summary":"Run website-legit","description":"Is this website legit? The country's link rules, the domain's age, its popularity and the public SMS scam campaigns combined into reported_scam, warning, caution or no_red_flags, with the signals behind it. Never a safe verdict: no_red_flags is not a guarantee.","parameters":[{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2000,"pattern":"^[^\\u0000-\\u001F\\u007F\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]*$","description":"A link, a host name or an email address (its domain is used). Only the domain is looked up; the link is never opened. IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422."},"country":{"default":"ES","type":"string","enum":["ES","MX","AR","IT","DE","US","FR","GB","BR","ID","CH","AT","TW","PT","JP","PL","CZ","NL","AE","IL","UA","GR","SE","ZA","CN","HU","NO","DK","TR","FI","RO","TH","SK","NZ","BE","IE","VE","CO","SA","AU","CL","IN","PE","EG","BY","RU","DZ","PH","PK","KR","HK","SI","SG","IR","NG"]}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com@example.net/login","country":"ES"}}}},"responses":{"200":{"description":"One credit charged. meta.usage contains the account balance after this request.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ToolSuccess"},{"type":"object","properties":{"data":{"type":"object","properties":{"tool":{"const":"website-legit"},"result":{"$ref":"#/components/schemas/website-legit"}}}}}]},"example":{"data":{"tool":"website-legit","result":{"domain":"example.net","domainAscii":"example.net","verdict":"warning","official":false,"brand":null,"ageDays":11381,"registered":"1995-08-31","ranked":false,"rank":null,"campaigns":{"count":0,"lastSeen":null},"signals":["not_ranked"],"linkFlags":["userinfo"],"attention":true,"checks":{"age":"ok","popularity":"ok"}}},"meta":{"requestId":"req_example","unitsCharged":1,"usage":{"periodStart":"2026-10-01","unitsUsed":3,"unitLimit":20,"unitsRemaining":17,"purchasedUnitsRemaining":0,"resetAt":"2026-11-01T00:00:00.000Z"}}}}}},"400":{"description":"invalid_json or invalid_body: the body could not be read. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"invalid_api_key: missing, invalid, expired or revoked key, including a revocation while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"pro_required: no monthly Pro credits and no purchased credits, including a plan change while the request ran. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"idempotency_conflict (key reused with another path or body) or idempotency_in_progress (Retry-After: 1).","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"payload_too_large: body over 100 KB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"description":"unsupported_media_type: send UTF-8 application/json without an unsupported Content-Encoding.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"validation_error (schema; error.details names each field), invalid_phone (phone tools) or invalid_input (other tools), invalid_idempotency_key. Nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"rate_limit_exceeded (per-key requests per minute), quota_exceeded (monthly credits) or ai_busy (sms-check: the shared AI budget, this account's share of it, or the parallel-request limit is used up). Retry-After says when to retry; error.details[0].resetAt when the window resets. No result delivered, nothing charged.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"tool_warming (a directory tool's cached aggregate is still being built: retry after Retry-After seconds), tool_unavailable, authentication_unavailable or beta_unavailable. Nothing charged; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"securitySchemes":{"developerBearer":{"type":"http","scheme":"bearer","bearerFormat":"nc_beta_…","description":"Raw keys are shown once and may be revoked immediately. The owner chooses when a key expires: after 30, 90 (default) or 365 days, or never; GET /v1/data/account answers key.expiresAt, null for a key that never expires."}},"parameters":{"OptionalIdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128}},"RequiredIdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128}}},"schemas":{"SuccessEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"type":"object","required":["requestId"],"properties":{"requestId":{"type":"string"},"unitsCharged":{"type":"integer","minimum":0},"usage":{"type":"object"}}}}},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/ErrorDetail"}}}}}},"who-calls":{"type":"object","properties":{"phoneNumber":{"type":"string"},"found":{"type":"boolean"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"risk":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":100},"level":{"type":"string","enum":["low","medium","high","critical"]}},"required":["score","level"],"additionalProperties":false},"reportCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"string"}},"verified":{"type":"boolean"},"carrier":{"anyOf":[{"type":"object","properties":{"operatorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"shortName":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberType":{"anyOf":[{"type":"string"},{"type":"null"}]},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"province":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"community":{"anyOf":[{"type":"string"},{"type":"null"}]},"costCategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"assignmentDate":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operatorName","shortName","numberType","prefix","country","province","region","city","community","costCategory","assignmentDate"],"additionalProperties":false},{"type":"null"}]},"verifiedBusiness":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"verified":{"type":"boolean","const":true}},"required":["name","verified"],"additionalProperties":false},{"type":"null"}]}},"required":["phoneNumber","found","updatedAt","risk","reportCount","categories","verified","carrier","verifiedBusiness"],"additionalProperties":false},"phone-intelligence":{"type":"object","properties":{"phoneNumber":{"type":"string"},"found":{"type":"boolean"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"risk":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":100},"level":{"type":"string","enum":["low","medium","high","critical"]}},"required":["score","level"],"additionalProperties":false},"reportCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"string"}},"verified":{"type":"boolean"},"carrier":{"anyOf":[{"type":"object","properties":{"operatorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"shortName":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberType":{"anyOf":[{"type":"string"},{"type":"null"}]},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"province":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"community":{"anyOf":[{"type":"string"},{"type":"null"}]},"costCategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"assignmentDate":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operatorName","shortName","numberType","prefix","country","province","region","city","community","costCategory","assignmentDate"],"additionalProperties":false},{"type":"null"}]},"verifiedBusiness":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"verified":{"type":"boolean","const":true}},"required":["name","verified"],"additionalProperties":false},{"type":"null"}]},"commentCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"aiRiskLevel":{"anyOf":[{"type":"string","enum":["low","medium","high","critical"]},{"type":"null"}]},"prefixRisk":{"anyOf":[{"type":"string","enum":["low","medium","high","critical"]},{"type":"null"}]}},"required":["phoneNumber","found","updatedAt","risk","reportCount","categories","verified","carrier","verifiedBusiness","commentCount","aiRiskLevel","prefixRisk"],"additionalProperties":false},"phone-exposure":{"type":"object","properties":{"atRisk":{"type":"boolean"}},"required":["atRisk"],"additionalProperties":false},"phone-risk":{"type":"object","properties":{"phoneNumber":{"type":"string"},"found":{"type":"boolean"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"risk":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":100},"level":{"type":"string","enum":["low","medium","high","critical"]}},"required":["score","level"],"additionalProperties":false},"signals":{"type":"object","properties":{"reportCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"verified":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}},"required":["reportCount","verified","categories"],"additionalProperties":false}},"required":["phoneNumber","found","updatedAt","risk","signals"],"additionalProperties":false},"carrier-lookup":{"type":"object","properties":{"phoneNumber":{"type":"string"},"found":{"type":"boolean"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"carrier":{"anyOf":[{"type":"object","properties":{"operatorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"shortName":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberType":{"anyOf":[{"type":"string"},{"type":"null"}]},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"province":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"community":{"anyOf":[{"type":"string"},{"type":"null"}]},"costCategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"assignmentDate":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operatorName","shortName","numberType","prefix","country","province","region","city","community","costCategory","assignmentDate"],"additionalProperties":false},{"type":"null"}]}},"required":["phoneNumber","found","updatedAt","carrier"],"additionalProperties":false},"verified-business":{"type":"object","properties":{"phoneNumber":{"type":"string"},"found":{"type":"boolean"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"verifiedBusiness":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"verified":{"type":"boolean","const":true}},"required":["name","verified"],"additionalProperties":false},{"type":"null"}]}},"required":["phoneNumber","found","updatedAt","verifiedBusiness"],"additionalProperties":false},"number-validator":{"type":"object","properties":{"valid":{"type":"boolean"},"possible":{"type":"boolean"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"callingCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},"e164":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["valid","possible","country","callingCode","type","e164"],"additionalProperties":false},"line-type":{"type":"object","properties":{"e164":{"type":"string"},"valid":{"type":"boolean"},"type":{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},"lineKind":{"type":"string","enum":["mobile","landline","either","special","voip","unknown"]}},"required":["e164","valid","type","lineKind"],"additionalProperties":false},"phone-formats":{"type":"object","properties":{"e164":{"type":"string"},"national":{"type":"string"},"international":{"type":"string"},"callingCode":{"type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"type":"boolean"}},"required":["e164","national","international","callingCode","country","valid"],"additionalProperties":false},"callback-cost":{"type":"object","properties":{"tier":{"type":"string","enum":["premium","directory","shared_cost","free","satellite","wangiri","international","standard","unknown"]},"scope":{"type":"string","enum":["national","international"]},"callingCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"registry":{"anyOf":[{"type":"object","properties":{"prefix":{"type":"string"},"serviceClass":{"type":"string"},"costClass":{"type":"string"},"geography":{"anyOf":[{"type":"string"},{"type":"null"}]},"indexable":{"type":"boolean"}},"required":["prefix","serviceClass","costClass","geography","indexable"],"additionalProperties":false},{"type":"null"}]}},"required":["tier","scope","callingCode","registry"],"additionalProperties":false},"prefix-origin":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"foreign"},"planLoaded":{"type":"boolean"},"numberType":{"anyOf":[{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},{"type":"null"}]},"foreignCode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","planLoaded","numberType","foreignCode"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"match"},"national":{"type":"string"},"row":{"type":"object","properties":{"prefix":{"type":"string"},"serviceClass":{"type":"string"},"costClass":{"type":"string"},"geography":{"anyOf":[{"type":"string"},{"type":"null"}]},"indexable":{"type":"boolean"}},"required":["prefix","serviceClass","costClass","geography","indexable"],"additionalProperties":false},"complete":{"type":"boolean"},"planLoaded":{"type":"boolean"},"numberType":{"anyOf":[{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},{"type":"null"}]},"foreignCode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","national","row","complete","planLoaded","numberType","foreignCode"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"suggestions"},"national":{"type":"string"},"rows":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"prefix":{"type":"string"},"serviceClass":{"type":"string"},"costClass":{"type":"string"},"geography":{"anyOf":[{"type":"string"},{"type":"null"}]},"indexable":{"type":"boolean"}},"required":["prefix","serviceClass","costClass","geography","indexable"],"additionalProperties":false}},"planLoaded":{"type":"boolean"},"numberType":{"anyOf":[{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},{"type":"null"}]},"foreignCode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","national","rows","planLoaded","numberType","foreignCode"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"no_match"},"national":{"type":"string"},"factsType":{"anyOf":[{"type":"string","enum":["mobile","landline","toll_free","premium"]},{"type":"null"}]},"planLoaded":{"type":"boolean"},"numberType":{"anyOf":[{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},{"type":"null"}]},"foreignCode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","national","factsType","planLoaded","numberType","foreignCode"],"additionalProperties":false}]},"premium-rate":{"type":"object","properties":{"category":{"type":"string","enum":["premium","mass_call","directory","shared_cost","personal","commercial_400","free","satellite","wangiri","international","standard","unknown"]},"callbackRisk":{"type":"string","enum":["blocked","high","medium","low"]},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}]},"callingCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","enum":["spain_plan","number_type","country_facts","calling_code","none"]}},"required":["category","callbackRisk","prefix","callingCode","source"],"additionalProperties":false},"wangiri":{"type":"object","properties":{"verdict":{"type":"string","enum":["listed","caribbean","satellite","domestic","not_listed","unknown_code"]},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"nanpArea":{"anyOf":[{"type":"string"},{"type":"null"}]},"entry":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"territories":{"type":"array","items":{"type":"string"}}},"required":["code","name","territories"],"additionalProperties":false},{"type":"null"}]}},"required":["verdict","code","nanpArea","entry"],"additionalProperties":false},"commercial-400":{"type":"object","properties":{"verdict":{"type":"string","enum":["commercial_400","mobile","geographic","free","special_cost","short","foreign"]},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["verdict","prefix"],"additionalProperties":false},"number-research":{"type":"object","properties":{"answer":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"countryCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"},"cached":{"type":"boolean"}},"required":["answer","sources","countryCode","language","cached"],"additionalProperties":false},"dial-code":{"type":"object","properties":{"code":{"type":"string","description":"The code as read (spaces and separators removed; barring passwords masked as ••••)."},"kind":{"type":"string","enum":["call_forwarding","call_barring","call_waiting","caller_id","imei","password","mobile_banking","ussd_service","phone_number","unknown"]},"action":{"anyOf":[{"type":"string","enum":["activate","deactivate","check","register","erase","hide_id_this_call","show_id_this_call","show"]},{"type":"null"}]},"service":{"anyOf":[{"type":"string","enum":["unconditional","busy","no_reply","not_reachable","all","all_conditional","baoc","boic","boic_exhc","baic","bic_roam","all_barring","all_outgoing","all_incoming","clip","clir","colp","colr"]},{"type":"null"}]},"forwardsTo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Where a forwarding code sends the calls, or null."},"calls":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The number a per-call code (#31#…, *67…) or a plain number dials, or null."},"risk":{"type":"string","enum":["high","medium","low","none"]},"undo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code that undoes it (##002# for any forwarding), or null."},"operator":{"anyOf":[{"type":"string","enum":["IN","US"]},{"type":"null"}],"description":"Country of a carrier-specific code, else null."}},"required":["code","kind","action","service","forwardsTo","calls","risk","undo","operator"],"additionalProperties":false},"call-scam-check":{"type":"object","properties":{"verdict":{"type":"string","enum":["scam","suspicious","no_clear_signs"]},"signals":{"type":"array","items":{"type":"string","enum":["impersonation","sms_code","remote_access","move_money","card_or_password","pressure","dial_code"]},"description":"The questions answered yes, in question order."},"actions":{"type":"array","items":{"type":"string","enum":["hang_up","cancel_forwarding","uninstall_app","call_bank_now","change_passwords","call_official_number","never_share_codes","report"]},"description":"What to do, most urgent first; see the call-scam-check actions glossary."},"reportChannel":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"fullName":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","fullName","url","phone"],"additionalProperties":false},{"type":"null"}],"description":"The verified reporting body of `country`, or null when none is verified."}},"required":["verdict","signals","actions","reportChannel"],"additionalProperties":false},"sms-check":{"type":"object","properties":{"verdict":{"type":"string","enum":["allow","suspicious"],"description":"allow: no sign of fraud; suspicious: likely fraud, phishing or unwanted spam."},"confidence":{"type":"integer","minimum":0,"maximum":100,"description":"How sure the model is of `verdict` itself, 0–100 (not a probability that the SMS is a scam). allow with 90 means \"very likely legitimate\"."},"reason":{"type":"string","maxLength":160,"description":"One sentence in `language` naming the deciding signal. Control and bidi characters are removed."}},"required":["verdict","confidence","reason"],"additionalProperties":false},"sms-brand":{"type":"object","properties":{"verdict":{"type":"string","enum":["official","unconfirmed","lookalike","shortener","other"]},"host":{"type":"string"},"brand":{"type":"object","properties":{"slug":{"type":"string","enum":["correos","dgt","agencia-tributaria","seguridad-social","bbva","santander","caixabank","dhl","seur","amazon"]},"name":{"type":"string"},"category":{"type":"string","enum":["delivery","tax","traffic","socialSecurity","bank","shop"]}},"required":["slug","name","category"],"additionalProperties":false},"officialDomains":{"type":"array","items":{"type":"string"}},"sightings":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["verdict","host","brand","officialDomains","sightings"],"additionalProperties":false},"sms-sender":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"brandName"},"tooLong":{"type":"boolean"},"brand":{"type":"object","properties":{"name":{"type":"string"},"keys":{"type":"array","items":{"type":"string"}},"officialDomains":{"type":"array","items":{"type":"string"},"description":"The brand's official domains as the shared sender check ranks them (own country first, then .com); the API adds no cap."}},"required":["name","keys","officialDomains"],"additionalProperties":false}},"required":["kind","tooLong","brand"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"name"},"tooLong":{"type":"boolean"},"lookalike":{"type":"boolean"},"brand":{"type":"null"}},"required":["kind","tooLong","lookalike","brand"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"shortCode"},"digits":{"type":"string"},"brand":{"type":"null"}},"required":["kind","digits","brand"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"nationalNumber"},"digits":{"type":"string"},"brand":{"type":"null"}},"required":["kind","digits","brand"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"internationalNumber"},"code":{"type":"string"},"digits":{"type":"string"},"brand":{"type":"null"}},"required":["kind","code","digits","brand"],"additionalProperties":false}]},"sms-code":{"type":"object","properties":{"verdict":{"type":"string","enum":["shared","asked","unrequested","requested"]},"severity":{"type":"string","enum":["critical","high","low","none"],"description":"shared: critical, asked: high, unrequested: low, requested: none."},"serviceRecoverySteps":{"type":"boolean"},"stepCodes":{"type":"array","items":{"type":"string","enum":["recover_whatsapp","call_bank","change_passwords","warn_contacts","report_and_keep_screenshots","do_not_share_code","stop_and_block_contact","call_known_contact","report_number","enable_two_step_verification","later_contact_is_scam","never_share_code","enter_only_in_official_app","never_give_payment_codes"]},"description":"In display order; see the stepCodes glossary."}},"required":["verdict","severity","serviceRecoverySteps","stepCodes"],"additionalProperties":false},"sms-report":{"type":"object","properties":{"channel":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"fullName":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","fullName","url","phone"],"additionalProperties":false},{"type":"null"}],"description":"The verified reporting body of `country`, or null when none is verified or no country was sent."},"verified":{"type":"boolean","description":"true exactly when channel is not null."},"stepCodes":{"type":"array","items":{"type":"string","enum":["contact_bank","change_passwords","tell_operator","report_number","keep_screenshot"]}},"reportFields":{"type":"object","properties":{"sender":{"anyOf":[{"type":"string"},{"type":"null"}]},"received":{"anyOf":[{"type":"string"},{"type":"null"}]},"link":{"anyOf":[{"type":"string"},{"type":"null"}]},"tapped":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"gaveData":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["sender","received","link","tapped","gaveData"],"additionalProperties":false}},"required":["channel","verified","stepCodes","reportFields"],"additionalProperties":false},"sms-campaigns":{"type":"object","properties":{"totalCampaigns":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalSightings":{"type":"integer","minimum":0,"maximum":9007199254740991},"topBrands":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"brand":{"type":"string"},"slug":{"anyOf":[{"type":"string","enum":["correos","dgt","agencia-tributaria","seguridad-social","bbva","santander","caixabank","dhl","seur","amazon"]},{"type":"null"}],"description":"sms-brand id of the brand, or null."},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["brand","slug","count"],"additionalProperties":false}},"topDomains":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["domain","count"],"additionalProperties":false}}},"required":["totalCampaigns","totalSightings","topBrands","topDomains"],"additionalProperties":false},"sms-redact":{"type":"object","properties":{"text":{"type":"string","description":"The message with each match replaced by its placeholder ([URL], [EMAIL], [IBAN], [CARD], [CVV], [EXPIRY], [ID], [PHONE], [CODE]); line breaks kept."},"counts":{"type":"object","properties":{"url":{"type":"integer","minimum":0,"maximum":9007199254740991},"email":{"type":"integer","minimum":0,"maximum":9007199254740991},"iban":{"type":"integer","minimum":0,"maximum":9007199254740991},"card":{"type":"integer","minimum":0,"maximum":9007199254740991},"cvv":{"type":"integer","minimum":0,"maximum":9007199254740991},"expiry":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"integer","minimum":0,"maximum":9007199254740991},"phone":{"type":"integer","minimum":0,"maximum":9007199254740991},"code":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["url","email","iban","card","cvv","expiry","id","phone","code"],"additionalProperties":false,"description":"Matches removed per kind; see the redaction kinds glossary."},"total":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["text","counts","total"],"additionalProperties":false},"callback-number":{"type":"object","properties":{"numbers":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"e164":{"type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO country of the number when its plan identifies one."},"type":{"type":"string","enum":["mobile","fixed_line","fixed_line_or_mobile","toll_free","premium_rate","shared_cost","voip","personal_number","pager","uan","voicemail","commercial_400","directory","unknown"]},"category":{"type":"string","enum":["premium","mass_call","directory","shared_cost","personal","commercial_400","free","satellite","wangiri","international","standard","unknown"],"description":"What calling it costs (premium-rate categories)."},"risk":{"type":"string","enum":["blocked","high","medium","low"]},"international":{"type":"boolean","description":"From another country than `country`."},"wangiri":{"anyOf":[{"type":"string","enum":["listed","caribbean","satellite","domestic","not_listed","unknown_code"]},{"type":"null"}],"description":"wangiri verdict of a foreign number, else null."}},"required":["e164","country","type","category","risk","international","wangiri"],"additionalProperties":false},"description":"Valid numbers found in the text, first appearance first, each once."},"signals":{"type":"array","items":{"type":"string","enum":["asks_to_call","premium_number","satellite_number","wangiri_country","international_number","dial_code_in_text","too_many_numbers"]},"description":"See the callback-number signals glossary."},"attention":{"type":"boolean"}},"required":["numbers","signals","attention"],"additionalProperties":false},"prefix-directory":{"type":"object","properties":{"countryCode":{"type":"string"},"callingCode":{"type":"string"},"planVersion":{"type":"string"},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"hasMore":{"type":"boolean"},"rows":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"prefix":{"type":"string"},"serviceClass":{"type":"string","enum":["geographic","mobile","personal","toll_free","shared_cost","premium","mass_call","nomadic","m2m","internet","short_code","global_service","other"]},"costClass":{"type":"string","enum":["free","standard","shared","premium","variable","unknown"]},"geography":{"anyOf":[{"type":"string"},{"type":"null"}]},"indexable":{"type":"boolean"},"source":{"type":"string"}},"required":["prefix","serviceClass","costClass","geography","indexable","source"],"additionalProperties":false}}},"required":["countryCode","callingCode","planVersion","total","page","limit","hasMore","rows"],"additionalProperties":false},"operator-directory":{"type":"object","properties":{"operators":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"prefixes":{"type":"array","items":{"type":"string"}},"numberType":{"anyOf":[{"type":"string"},{"type":"null"}]},"spamCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["name","prefixes","numberType","spamCount"],"additionalProperties":false}},"specialPrefixes":{"type":"array","items":{"type":"object","properties":{"prefix":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"cost":{"type":"string"},"risk":{"type":"string"}},"required":["prefix","name","type","cost","risk"],"additionalProperties":false}}},"required":["operators","specialPrefixes"],"additionalProperties":false},"calling-codes":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"territories":{"type":"array","items":{"type":"string"}},"source":{"type":"string"}},"required":["code","name","territories","source"],"additionalProperties":false}},"total":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","total"],"additionalProperties":false},"spam-directory":{"oneOf":[{"type":"object","properties":{"view":{"type":"string","const":"summary"},"totals":{"type":"object","properties":{"blocked":{"type":"integer","minimum":0,"maximum":9007199254740991},"reports":{"type":"integer","minimum":0,"maximum":9007199254740991},"comments":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["blocked","reports","comments"],"additionalProperties":false},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["TELEMARKETING","SCAM","DEBT","HARASSMENT","SURVEY","SPAM"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"topReported":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"phoneNumber":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"reportCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"lastReported":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["phoneNumber","category","reportCount","lastReported"],"additionalProperties":false}}},"required":["view","totals","categories","topReported"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","const":"category"},"category":{"type":"string","enum":["TELEMARKETING","SCAM","DEBT","HARASSMENT","SURVEY","SPAM"]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"hasMore":{"type":"boolean"},"rows":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"phoneNumber":{"type":"string"},"category":{"type":"string","enum":["TELEMARKETING","SCAM","DEBT","HARASSMENT","SURVEY","SPAM"]},"reportCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["phoneNumber","category","reportCount"],"additionalProperties":false}}},"required":["view","category","total","page","limit","hasMore","rows"],"additionalProperties":false}]},"trends":{"type":"object","properties":{"totals":{"type":"object","properties":{"blockedNumbers":{"type":"integer","minimum":0,"maximum":9007199254740991},"reports":{"type":"integer","minimum":0,"maximum":9007199254740991},"comments":{"type":"integer","minimum":0,"maximum":9007199254740991},"aiAnalyzed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["blockedNumbers","reports","comments","aiAnalyzed"],"additionalProperties":false},"activity24h":{"type":"object","properties":{"blockedNumbers":{"type":"integer","minimum":0,"maximum":9007199254740991},"reports":{"type":"integer","minimum":0,"maximum":9007199254740991},"comments":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["blockedNumbers","reports","comments"],"additionalProperties":false},"verification":{"type":"object","properties":{"verifiedBlocked":{"type":"integer","minimum":0,"maximum":9007199254740991},"unverifiedBlocked":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["verifiedBlocked","unverifiedBlocked"],"additionalProperties":false},"freshness":{"type":"object","properties":{"blockedNumbers":{"anyOf":[{"type":"string"},{"type":"null"}]},"reports":{"anyOf":[{"type":"string"},{"type":"null"}]},"comments":{"anyOf":[{"type":"string"},{"type":"null"}]},"aiAnalyzed":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["blockedNumbers","reports","comments","aiAnalyzed"],"additionalProperties":false},"categoryDistribution":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"phoneTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","count"],"additionalProperties":false}},"topOperators":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["operator","count"],"additionalProperties":false}},"growthTimeline":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["week","count"],"additionalProperties":false}},"topPrefixes":{"type":"array","items":{"type":"object","properties":{"prefix":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["prefix","count"],"additionalProperties":false}},"searchTrends":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"searches":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["date","searches"],"additionalProperties":false}},"communityDistribution":{"type":"array","items":{"type":"object","properties":{"community":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["community","count"],"additionalProperties":false}},"impersonationRanking":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["company","count"],"additionalProperties":false}},"aiBreakdown":{"type":"object","properties":{"dangerLevels":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["level","count"],"additionalProperties":false}},"sectors":{"type":"array","items":{"type":"object","properties":{"sector":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["sector","count"],"additionalProperties":false}},"tactics":{"type":"array","items":{"type":"object","properties":{"tactic":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["tactic","count"],"additionalProperties":false}},"purposes":{"type":"array","items":{"type":"object","properties":{"purpose":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["purpose","count"],"additionalProperties":false}}},"required":["dangerLevels","sectors","tactics","purposes"],"additionalProperties":false}},"required":["totals","activity24h","verification","freshness","categoryDistribution","phoneTypes","growthTimeline","topPrefixes","searchTrends","communityDistribution","impersonationRanking","aiBreakdown"],"additionalProperties":false},"smishing":{"type":"object","properties":{"verdict":{"type":"string","enum":["scam","suspicious","likely_safe"],"description":"scam (score ≥ 4), suspicious (2–3) or likely_safe (0–1); see the verdict glossary."},"score":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Rule-engine score, an integer ≥ 0 with no upper cap. Thresholds: ≥ 4 scam, 2–3 suspicious, 0–1 likely_safe."},"attention":{"type":"boolean"},"signals":{"type":"array","items":{"type":"string","enum":["shortener","suspicious_domain","unofficial_link","risky_tld","urgency","brand_impersonation","delivery_lure","blocked_keyword","verification_code","no_links"]},"description":"Rule-engine signals; see the signals glossary."},"hosts":{"type":"array","items":{"type":"string"},"description":"Unicode form of every destination host, www. dropped: \"bücher.de\" and \"xn--bcher-kva.de\" are one host."},"linkFlags":{"type":"array","items":{"type":"string","enum":["http","userinfo","internationalHost","ipAddress","nonStandardPort"]},"description":"Structural link flags; see the linkFlags glossary."},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The brand name the text names, as the rule engine spells it (lower case), or null."},"brandSlug":{"anyOf":[{"type":"string","enum":["correos","dgt","agencia-tributaria","seguridad-social","bbva","santander","caixabank","dhl","seur","amazon"]},{"type":"null"}],"description":"The sms-brand id of the named brand when it has one (correos, dgt, …), else null."}},"required":["verdict","score","attention","signals","hosts","linkFlags","brand","brandSlug"],"additionalProperties":false},"link-check":{"type":"object","properties":{"host":{"type":"string","description":"Unicode form of the host, www. dropped."},"hostAscii":{"type":"string","description":"What a browser connects to (punycode), www. dropped."},"official":{"type":"boolean","description":"The host is, or is under, a listed brand or government domain of the country rules."},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand id of that official domain (an sms-brand id, else the brand catalog name), or null."},"hosts":{"type":"array","items":{"type":"string"},"description":"Unicode form of every destination host, www. dropped: \"bücher.de\" and \"xn--bcher-kva.de\" are one host."},"linkFlags":{"type":"array","items":{"type":"string","enum":["http","userinfo","internationalHost","ipAddress","nonStandardPort"]},"description":"Structural link flags; see the linkFlags glossary."},"signals":{"type":"array","items":{"type":"string","enum":["shortener","suspicious_domain","unofficial_link","risky_tld","urgency","brand_impersonation","delivery_lure","blocked_keyword","verification_code","no_links"]},"description":"Rule-engine signals; see the signals glossary."},"attention":{"type":"boolean"}},"required":["host","hostAscii","official","brand","hosts","linkFlags","signals","attention"],"additionalProperties":false},"safety-tools":{"type":"object","properties":{"attention":{"type":"boolean"},"signals":{"type":"array","items":{"type":"string","enum":["shortener","suspicious_domain","unofficial_link","risky_tld","urgency","brand_impersonation","delivery_lure","blocked_keyword","verification_code","no_links"]},"description":"Rule-engine signals; see the signals glossary."},"hosts":{"type":"array","items":{"type":"string"},"description":"Unicode form of every destination host, www. dropped: \"bücher.de\" and \"xn--bcher-kva.de\" are one host."},"linkFlags":{"type":"array","items":{"type":"string","enum":["http","userinfo","internationalHost","ipAddress","nonStandardPort"]},"description":"Structural link flags; see the linkFlags glossary."}},"required":["attention","signals","hosts","linkFlags"],"additionalProperties":false},"sms-filter":{"type":"object","properties":{"country":{"type":"string"},"version":{"type":"string"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","enum":["database","legacy_default","default","empty"]},"counts":{"type":"object","properties":{"riskKeywords":{"type":"integer","minimum":0,"maximum":9007199254740991},"brandKeywords":{"type":"integer","minimum":0,"maximum":9007199254740991},"trustedDomains":{"type":"integer","minimum":0,"maximum":9007199254740991},"shortenerDomains":{"type":"integer","minimum":0,"maximum":9007199254740991},"blockedKeywords":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["riskKeywords","brandKeywords","trustedDomains","shortenerDomains","blockedKeywords"],"additionalProperties":false}},"required":["country","version","updatedAt","source","counts"],"additionalProperties":false},"qr-check":{"type":"object","properties":{"payload":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"url"},"url":{"type":"string"}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"phone"},"number":{"type":"string"}},"required":["type","number"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"sms"},"number":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","number","body"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"email"},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","address","subject","body"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"wifi"},"ssid":{"anyOf":[{"type":"string"},{"type":"null"}]},"security":{"type":"string","enum":["open","wep","wpa","unknown"]},"hidden":{"type":"boolean"},"hasPassword":{"type":"boolean"}},"required":["type","ssid","security","hidden","hasPassword"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"contact"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"organization":{"anyOf":[{"type":"string"},{"type":"null"}]},"phones":{"type":"array","items":{"type":"string"}},"emails":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["type","name","organization","phones","emails","urls"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"event"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","summary","description","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"geo"},"latitude":{"type":"number"},"longitude":{"type":"number"}},"required":["type","latitude","longitude"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"payment"},"scheme":{"type":"string","enum":["epc","swiss_qr","upi","pix","promptpay","paynow","qris","duitnow","fps","emv"]},"payee":{"anyOf":[{"type":"string"},{"type":"null"}]},"account":{"anyOf":[{"type":"string"},{"type":"null"}]},"accountValid":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"amount":{"anyOf":[{"type":"string"},{"type":"null"}]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"reference":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"crcValid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["type","scheme","payee","account","accountValid","amount","currency","reference","country","city","crcValid"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"crypto"},"network":{"type":"string","enum":["bitcoin","bitcoin_cash","litecoin","dogecoin","ethereum","monero","tron","solana","lightning"]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"amount":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","network","address","amount"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"other_link"},"scheme":{"type":"string"}},"required":["type","scheme"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":false}],"description":"One of url, phone, sms, email, wifi, contact, event, geo, payment, crypto, other_link, text; see the qr-check payload glossary."},"signals":{"type":"array","items":{"type":"string","enum":["payment_request","crypto_request","amount_prefilled","invalid_account","invalid_checksum","wifi_join","open_wifi","calls_number","ussd_code","call_forwarding","sends_sms","premium_number","blocked_number","unusual_scheme","unreadable_link","unreadable_text","shortener","suspicious_domain","unofficial_link","risky_tld","urgency","brand_impersonation","delivery_lure","blocked_keyword","verification_code","no_links"]},"description":"See the qr-check signals glossary (plus the SMS engine signals)."},"attention":{"type":"boolean"},"hosts":{"type":"array","items":{"type":"string"},"description":"Unicode form of every destination host, www. dropped: \"bücher.de\" and \"xn--bcher-kva.de\" are one host."},"linkFlags":{"type":"array","items":{"type":"string","enum":["http","userinfo","internationalHost","ipAddress","nonStandardPort"]},"description":"Structural link flags; see the linkFlags glossary."},"link":{"anyOf":[{"type":"object","properties":{"host":{"type":"string"},"hostAscii":{"type":"string"},"official":{"type":"boolean"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}]},"port":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["host","hostAscii","official","brand","port"],"additionalProperties":false},{"type":"null"}],"description":"The inspected link of a url code, else null."},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"risk":{"anyOf":[{"type":"string","enum":["blocked","high","medium","low"]},{"type":"null"}]}},"required":["number","category","risk"],"additionalProperties":false},"description":"Numbers the code calls, texts, lists or forwards calls to, with the premium-rate category and risk."}},"required":["payload","signals","attention","hosts","linkFlags","link","numbers"],"additionalProperties":false},"email-headers":{"type":"object","properties":{"fromDomain":{"type":"string","description":"The From domain in Unicode; never a full address."},"fromDomainAscii":{"type":"string"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name with every email local part and IP address replaced by …"},"replyToDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"returnPathDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"senderDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Decoded subject, local parts and IP addresses replaced by …"},"auth":{"type":"object","properties":{"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"authserv-id of the receiving provider (mx.google.com…), or null."},"source":{"anyOf":[{"type":"string","enum":["authentication_results","arc","received_spf"]},{"type":"null"}]},"spf":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral","none","temperror","permerror","policy"]},{"type":"null"}]},"spfDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"dkim":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral","none","temperror","permerror","policy"]},{"type":"null"}]},"dkimDomains":{"type":"array","items":{"type":"string"}},"dmarc":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral","none","temperror","permerror","policy"]},{"type":"null"}]},"dmarcDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"compauth":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral","none","temperror","permerror","policy"]},{"type":"null"}]},"aligned":{"type":"boolean"}},"required":["provider","source","spf","spfDomain","dkim","dkimDomains","dmarc","dmarcDomain","compauth","aligned"],"additionalProperties":false,"description":"The topmost Authentication-Results of the receiving provider (RFC 8601)."},"authenticated":{"type":"boolean","description":"DMARC pass for the From domain, or an aligned DKIM pass (relaxed, RFC 7489)."},"brand":{"anyOf":[{"type":"string"},{"type":"null"}]},"official":{"type":"boolean"},"freeMail":{"type":"boolean"},"signals":{"type":"array","items":{"type":"string","enum":["no_auth_results","dmarc_fail","dmarc_none","spf_fail","dkim_fail","dkim_unaligned","reply_to_mismatch","return_path_mismatch","display_name_brand","display_name_address","free_mail_brand","lookalike_domain","suspicious_domain","risky_tld","multiple_from"]},"description":"See the email-headers signals glossary."},"attention":{"type":"boolean"}},"required":["fromDomain","fromDomainAscii","displayName","replyToDomain","returnPathDomain","senderDomain","subject","auth","authenticated","brand","official","freeMail","signals","attention"],"additionalProperties":false},"mx-lookup":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as DNS sees it."},"found":{"type":"boolean","description":"The domain exists in DNS."},"records":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":9007199254740991},"host":{"type":"string"}},"required":["priority","host"],"additionalProperties":false},"description":"MX hosts, lowest priority value (tried first) first."},"nullMx":{"type":"boolean","description":"The domain publishes \"MX 0 .\" (RFC 7505): it receives no mail."},"implicitMx":{"type":"boolean","description":"No MX record, but the domain has an address, so mail is delivered there (RFC 5321)."},"acceptsMail":{"type":"boolean"},"provider":{"anyOf":[{"type":"string","enum":["google","microsoft","yahoo","icloud","zoho","proton","fastmail","gmx","ionos","ovh","yandex","mailru","qq","netease","naver","mimecast","proofpoint","barracuda","cisco","amazon_ses"]},{"type":"null"}],"description":"Who runs the mail servers, from the MX host names; see the provider glossary. Null when not recognised."},"signals":{"type":"array","items":{"type":"string","enum":["domain_not_found","no_mx","null_mx","implicit_mx","single_mx","mx_without_address","mx_ip_literal"]},"description":"See the mx-lookup signals glossary."},"attention":{"type":"boolean"}},"required":["domain","domainAscii","found","records","nullMx","implicitMx","acceptsMail","provider","signals","attention"],"additionalProperties":false},"spf-check":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as DNS sees it."},"found":{"type":"boolean"},"record":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The SPF record as published; null when there is none or more than one."},"recordCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"terms":{"type":"array","items":{"type":"object","properties":{"qualifier":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral"]},{"type":"null"}],"description":"Result when the term matches; null for the redirect and exp modifiers."},"mechanism":{"type":"string","enum":["all","include","a","mx","ptr","ip4","ip6","exists","redirect","exp"]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["qualifier","mechanism","value"],"additionalProperties":false},"description":"The record's mechanisms and modifiers, in order."},"allResult":{"anyOf":[{"type":"string","enum":["pass","fail","softfail","neutral"]},{"type":"null"}],"description":"What the record ends with (its all, or its redirect target's): the result for every other sender. Null when it has none."},"lookups":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Mechanisms and modifiers that query DNS, across the whole include tree. Receivers stop above 10 (permerror)."},"includes":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"found":{"type":"boolean"}},"required":["domain","found"],"additionalProperties":false},"description":"Every include and redirect target, in the order read, and whether it publishes SPF."},"signals":{"type":"array","items":{"type":"string","enum":["no_spf","multiple_records","syntax_error","too_many_lookups","include_not_found","include_loop","plus_all","neutral_all","softfail_all","no_all","ptr_mechanism","macros"]},"description":"See the spf-check signals glossary."},"valid":{"type":"boolean","description":"A receiver can evaluate the record: one record, no syntax error, at most 10 lookups, every include found, no loop."},"attention":{"type":"boolean"}},"required":["domain","domainAscii","found","record","recordCount","terms","allResult","lookups","includes","signals","valid","attention"],"additionalProperties":false},"dmarc-check":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as DNS sees it."},"found":{"type":"boolean"},"record":{"anyOf":[{"type":"string"},{"type":"null"}]},"foundAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The domain whose _dmarc record applies (this one or a parent), in Unicode."},"inherited":{"type":"boolean","description":"The record is a parent domain's (DMARCbis tree walk)."},"policy":{"anyOf":[{"type":"string","enum":["none","quarantine","reject"]},{"type":"null"}],"description":"The p= tag."},"subdomainPolicy":{"anyOf":[{"type":"string","enum":["none","quarantine","reject"]},{"type":"null"}],"description":"The sp= tag, or null."},"effectivePolicy":{"anyOf":[{"type":"string","enum":["none","quarantine","reject"]},{"type":"null"}],"description":"What applies to this domain: p, or sp when the record is inherited."},"percentage":{"type":"integer","minimum":0,"maximum":100,"description":"pct: the share of failing mail the policy applies to (100 when absent)."},"alignment":{"type":"object","properties":{"dkim":{"type":"string","enum":["relaxed","strict"]},"spf":{"type":"string","enum":["relaxed","strict"]}},"required":["dkim","spf"],"additionalProperties":false},"reports":{"type":"object","properties":{"aggregate":{"type":"array","items":{"type":"string"}},"failure":{"type":"array","items":{"type":"string"}}},"required":["aggregate","failure"],"additionalProperties":false,"description":"Domains that receive the aggregate (rua) and failure (ruf) reports; never a full address."},"signals":{"type":"array","items":{"type":"string","enum":["no_dmarc","multiple_records","syntax_error","policy_none","partial_percentage","no_aggregate_reports","inherited","weaker_subdomain_policy"]},"description":"See the dmarc-check signals glossary."},"valid":{"type":"boolean"},"attention":{"type":"boolean"}},"required":["domain","domainAscii","found","record","foundAt","inherited","policy","subdomainPolicy","effectivePolicy","percentage","alignment","reports","signals","valid","attention"],"additionalProperties":false},"dkim-check":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as DNS sees it."},"selectorGiven":{"type":"boolean"},"selectorsTried":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"keys":{"type":"array","items":{"type":"object","properties":{"selector":{"type":"string"},"keyType":{"anyOf":[{"type":"string","enum":["rsa","ed25519"]},{"type":"null"}]},"keyBits":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Key size; 256 for ed25519."},"testing":{"type":"boolean","description":"t=y: the domain asks receivers not to act on failures yet."},"revoked":{"type":"boolean","description":"An empty p=: the selector is retired."},"valid":{"type":"boolean"},"signals":{"type":"array","items":{"type":"string","enum":["revoked_key","testing_mode","weak_key","short_key","sha1_only","syntax_error","unknown_key_type"]},"description":"See the dkim-check key signals glossary."}},"required":["selector","keyType","keyBits","testing","revoked","valid","signals"],"additionalProperties":false},"description":"Every selector that publishes a key record."},"signals":{"type":"array","items":{"type":"string","enum":["none_found"]},"description":"none_found: no key at the given selector, or at any common selector (another selector may still be in use)."},"attention":{"type":"boolean"}},"required":["domain","domainAscii","selectorGiven","selectorsTried","keys","signals","attention"],"additionalProperties":false},"email-verify":{"type":"object","properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The address's domain in Unicode; null when the address does not parse."},"domainAscii":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["invalid","domain_not_found","no_mail","accepts_mail"],"description":"invalid, domain_not_found, no_mail or accepts_mail. accepts_mail means the domain receives mail, not that this mailbox exists."},"syntaxValid":{"type":"boolean"},"acceptsMail":{"type":"boolean"},"mx":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"provider":{"anyOf":[{"type":"string","enum":["google","microsoft","yahoo","icloud","zoho","proton","fastmail","gmx","ionos","ovh","yandex","mailru","qq","netease","naver","mimecast","proofpoint","barracuda","cisco","amazon_ses"]},{"type":"null"}],"description":"Who runs the mail servers, from the MX host names; see the provider glossary. Null when not recognised."},"implicit":{"type":"boolean"},"nullMx":{"type":"boolean"}},"required":["count","provider","implicit","nullMx"],"additionalProperties":false},"disposable":{"type":"boolean","description":"The domain (or a parent) is on the open disposable-email list (CC0)."},"role":{"type":"boolean","description":"A function mailbox (info@, support@, noreply@…), not a person."},"freeMail":{"type":"boolean","description":"A free personal mailbox provider (gmail.com, outlook.com…)."},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The provider domain the address was probably meant for (gmial.com → gmail.com)."},"signals":{"type":"array","items":{"type":"string","enum":["syntax_error","domain_not_found","null_mx","no_mx","implicit_mx","disposable_domain","role_address","free_mail","typo_domain"]},"description":"See the email-verify signals glossary."},"attention":{"type":"boolean"}},"required":["domain","domainAscii","status","syntaxValid","acceptsMail","mx","disposable","role","freeMail","suggestion","signals","attention"],"additionalProperties":false},"website-age":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode, www. dropped."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as the registry and DNS see it."},"rdapAvailable":{"type":"boolean","description":"The registry of this top-level domain publishes RDAP over HTTPS (IANA bootstrap). false: nothing was looked up."},"found":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"The registry answered for the domain or a parent; false: no record at any name tried; null when rdapAvailable is false."},"registeredDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The name the registry answered for (the domain or a parent), in Unicode."},"registered":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Registration day (UTC)."},"updated":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Day of the last change the registry recorded."},"expires":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Expiration day."},"ageDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Whole days since registration."},"registrar":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The registrar's name (the RDAP registrar entity)."},"status":{"type":"array","items":{"type":"string"},"description":"EPP status values as the registry publishes them (\"client transfer prohibited\"…)."},"campaigns":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Public SMS scam campaigns whose link domain is this domain or the domain it is registered under."},"lastSeen":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"The last day (UTC) one of them was seen; null without campaigns."}},"required":["count","lastSeen"],"additionalProperties":false,"description":"Counts only: no message, sender or link."},"signals":{"type":"array","items":{"type":"string","enum":["very_new","new","expires_soon","on_hold","pending_delete","not_found","rdap_not_published","scam_campaigns"]},"description":"See the website-age signals glossary."},"attention":{"type":"boolean"}},"required":["domain","domainAscii","rdapAvailable","found","registeredDomain","registered","updated","expires","ageDays","registrar","status","campaigns","signals","attention"],"additionalProperties":false},"domain-popularity":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode, www. dropped."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as the registry and DNS see it."},"ranked":{"type":"boolean","description":"The domain or a parent is in the Majestic Million. Most legitimate sites are not."},"rank":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Global rank in the list (1 is the most linked-to); null when not ranked."},"rankedDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The listed name: the domain itself or the parent whose rank this is."},"refSubnets":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Distinct /24 subnets linking to the listed name."},"refIps":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Distinct IP addresses linking to the listed name."},"listSize":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Domains in the loaded copy of the list."},"updated":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"The day the API loaded this copy of the list (refreshed weekly)."},"source":{"type":"object","properties":{"name":{"type":"string","const":"Majestic Million"},"url":{"type":"string","const":"https://majestic.com/reports/majestic-million"},"license":{"type":"string","const":"CC BY 3.0"},"licenseUrl":{"type":"string","const":"https://creativecommons.org/licenses/by/3.0/"}},"required":["name","url","license","licenseUrl"],"additionalProperties":false,"description":"Attribution required by the list's CC BY 3.0 licence; show it with the rank."}},"required":["domain","domainAscii","ranked","rank","rankedDomain","refSubnets","refIps","listSize","updated","source"],"additionalProperties":false},"website-legit":{"type":"object","properties":{"domain":{"type":"string","description":"The domain in Unicode, www. dropped."},"domainAscii":{"type":"string","description":"The same domain in ASCII (punycode), as the registry and DNS see it."},"verdict":{"type":"string","enum":["reported_scam","warning","caution","no_red_flags"],"description":"reported_scam, warning, caution or no_red_flags; see the website-legit verdict glossary. Never a \"safe\" verdict."},"official":{"type":"boolean","description":"The country's link rules list the domain as a brand's or a government's own."},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand id of that official domain, or null."},"ageDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Whole days since registration (website-age); null when unknown."},"registered":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"ranked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"In the Majestic Million (the domain or a parent); null when the list could not be read."},"rank":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"campaigns":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Public SMS scam campaigns whose link domain is this domain or the domain it is registered under."},"lastSeen":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"The last day (UTC) one of them was seen; null without campaigns."}},"required":["count","lastSeen"],"additionalProperties":false,"description":"Counts only: no message, sender or link."},"signals":{"type":"array","items":{"type":"string","enum":["shortener","suspicious_domain","unofficial_link","risky_tld","urgency","brand_impersonation","delivery_lure","blocked_keyword","verification_code","no_links","very_new","new","expires_soon","on_hold","pending_delete","not_found","rdap_not_published","scam_campaigns","not_ranked"]},"description":"The link rules' signals, the website-age signals and not_ranked; see the glossary."},"linkFlags":{"type":"array","items":{"type":"string","enum":["http","userinfo","internationalHost","ipAddress","nonStandardPort"]},"description":"Structural flags of the link as pasted; see the linkFlags glossary."},"attention":{"type":"boolean","description":"The verdict is not no_red_flags."},"checks":{"type":"object","properties":{"age":{"type":"string","enum":["ok","not_found","not_published","unavailable"],"description":"ok, not_found, not_published (no RDAP for the TLD) or unavailable (the registry did not answer)."},"popularity":{"type":"string","enum":["ok","unavailable"],"description":"ok, or unavailable when the list could not be read."}},"required":["age","popularity"],"additionalProperties":false,"description":"Whether each source answered. An unavailable source does not fail the tool."}},"required":["domain","domainAscii","verdict","official","brand","ageDays","registered","ranked","rank","campaigns","signals","linkFlags","attention","checks"],"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message"],"properties":{"field":{"type":"string","description":"Request field at fault (dotted path), or body. Present on every 422 detail."},"code":{"type":"string","description":"Stable machine code: the zod issue code for validation_error, or a tool reason such as invalid_phone."},"message":{"type":"string"},"resetAt":{"type":"string","format":"date-time","description":"On the 429s: when the rate window, the monthly credits or the AI budget window reset."}}},"Usage":{"type":"object","required":["periodStart","unitLimit","unitsUsed","unitsRemaining","purchasedUnitsRemaining","resetAt"],"properties":{"periodStart":{"type":"string","format":"date","description":"First day of the current UTC month."},"unitLimit":{"type":"integer","minimum":0,"description":"Credits this UTC month: 20 with active Pro, 0 otherwise."},"unitsUsed":{"type":"integer","minimum":0},"unitsRemaining":{"type":"integer","minimum":0,"description":"Monthly credits left this UTC month; spent before purchased credits."},"purchasedUnitsRemaining":{"type":"integer","minimum":0,"description":"Purchased credits left. They never expire and are spent after the monthly credits."},"resetAt":{"type":"string","format":"date-time","description":"When credits reset: the start of the next UTC month."}}},"ToolCatalogEntry":{"type":"object","required":["id","method","namedPath","path","group","plan","credits","countryScope","acceptsPrefix","input","summary","inputSchema","resultSchema","example"],"properties":{"id":{"type":"string","enum":["who-calls","phone-exposure","phone-intelligence","phone-risk","carrier-lookup","verified-business","phone-formats","callback-cost","prefix-origin","number-validator","line-type","premium-rate","wangiri","commercial-400","number-research","dial-code","call-scam-check","sms-check","sms-brand","sms-sender","sms-code","sms-report","sms-campaigns","sms-redact","callback-number","prefix-directory","operator-directory","calling-codes","spam-directory","trends","smishing","link-check","safety-tools","sms-filter","qr-check","email-headers","mx-lookup","spf-check","dmarc-check","dkim-check","email-verify","website-age","domain-popularity","website-legit"]},"method":{"const":"POST"},"namedPath":{"type":"string","description":"Recommended route: POST here with the body, without tool."},"path":{"const":"/v2/tools","description":"Generic route: the same body plus tool."},"group":{"type":"string","enum":["Call & number","SMS","Directories","Message & link","Email & DNS","Websites"]},"plan":{"const":"Pro"},"credits":{"const":1},"countryScope":{"type":"string","enum":["ES","country","global"]},"acceptsPrefix":{"type":"boolean","description":"Whether phone may be a bare prefix."},"input":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"inputSchema":{"type":"object","description":"JSON Schema of the named route body."},"resultSchema":{"type":"object","description":"JSON Schema of data.result."},"example":{"type":"object","required":["input","result"],"properties":{"input":{"type":"object"},"result":{}}}}},"ToolCatalog":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["tools"],"properties":{"tools":{"type":"array","items":{"$ref":"#/components/schemas/ToolCatalogEntry"}}}},"meta":{"type":"object","required":["requestId","unitsCharged","usage"],"properties":{"requestId":{"type":"string"},"unitsCharged":{"const":0},"usage":{"$ref":"#/components/schemas/Usage"}}}}},"ToolSuccess":{"type":"object","required":["data","meta"],"properties":{"data":{"oneOf":[{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"who-calls"},"result":{"$ref":"#/components/schemas/who-calls"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"phone-exposure"},"result":{"$ref":"#/components/schemas/phone-exposure"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"phone-intelligence"},"result":{"$ref":"#/components/schemas/phone-intelligence"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"phone-risk"},"result":{"$ref":"#/components/schemas/phone-risk"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"carrier-lookup"},"result":{"$ref":"#/components/schemas/carrier-lookup"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"verified-business"},"result":{"$ref":"#/components/schemas/verified-business"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"phone-formats"},"result":{"$ref":"#/components/schemas/phone-formats"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"callback-cost"},"result":{"$ref":"#/components/schemas/callback-cost"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"prefix-origin"},"result":{"$ref":"#/components/schemas/prefix-origin"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"number-validator"},"result":{"$ref":"#/components/schemas/number-validator"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"line-type"},"result":{"$ref":"#/components/schemas/line-type"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"premium-rate"},"result":{"$ref":"#/components/schemas/premium-rate"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"wangiri"},"result":{"$ref":"#/components/schemas/wangiri"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"commercial-400"},"result":{"$ref":"#/components/schemas/commercial-400"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"number-research"},"result":{"$ref":"#/components/schemas/number-research"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"dial-code"},"result":{"$ref":"#/components/schemas/dial-code"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"call-scam-check"},"result":{"$ref":"#/components/schemas/call-scam-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-check"},"result":{"$ref":"#/components/schemas/sms-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-brand"},"result":{"$ref":"#/components/schemas/sms-brand"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-sender"},"result":{"$ref":"#/components/schemas/sms-sender"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-code"},"result":{"$ref":"#/components/schemas/sms-code"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-report"},"result":{"$ref":"#/components/schemas/sms-report"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-campaigns"},"result":{"$ref":"#/components/schemas/sms-campaigns"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-redact"},"result":{"$ref":"#/components/schemas/sms-redact"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"callback-number"},"result":{"$ref":"#/components/schemas/callback-number"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"prefix-directory"},"result":{"$ref":"#/components/schemas/prefix-directory"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"operator-directory"},"result":{"$ref":"#/components/schemas/operator-directory"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"calling-codes"},"result":{"$ref":"#/components/schemas/calling-codes"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"spam-directory"},"result":{"$ref":"#/components/schemas/spam-directory"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"trends"},"result":{"$ref":"#/components/schemas/trends"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"smishing"},"result":{"$ref":"#/components/schemas/smishing"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"link-check"},"result":{"$ref":"#/components/schemas/link-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"safety-tools"},"result":{"$ref":"#/components/schemas/safety-tools"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"sms-filter"},"result":{"$ref":"#/components/schemas/sms-filter"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"qr-check"},"result":{"$ref":"#/components/schemas/qr-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"email-headers"},"result":{"$ref":"#/components/schemas/email-headers"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"mx-lookup"},"result":{"$ref":"#/components/schemas/mx-lookup"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"spf-check"},"result":{"$ref":"#/components/schemas/spf-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"dmarc-check"},"result":{"$ref":"#/components/schemas/dmarc-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"dkim-check"},"result":{"$ref":"#/components/schemas/dkim-check"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"email-verify"},"result":{"$ref":"#/components/schemas/email-verify"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"website-age"},"result":{"$ref":"#/components/schemas/website-age"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"domain-popularity"},"result":{"$ref":"#/components/schemas/domain-popularity"}}},{"type":"object","required":["tool","result"],"properties":{"tool":{"const":"website-legit"},"result":{"$ref":"#/components/schemas/website-legit"}}}]},"meta":{"type":"object","required":["requestId","unitsCharged","usage"],"properties":{"requestId":{"type":"string"},"unitsCharged":{"const":1},"usage":{"$ref":"#/components/schemas/Usage"}}}}}},"headers":{"XRequestId":{"description":"Request identifier, also in meta.requestId and error.requestId.","schema":{"type":"string"}},"XRateLimitLimit":{"description":"Requests per minute allowed for this key.","schema":{"type":"integer","minimum":1}},"XRateLimitRemaining":{"description":"Requests left in the current minute.","schema":{"type":"integer","minimum":0}},"XRateLimitReset":{"description":"Unix time (seconds) when the current minute window resets.","schema":{"type":"integer"}},"RetryAfter":{"description":"Seconds to wait: until the next minute window (rate_limit_exceeded), the next UTC month (quota_exceeded), the AI budget window (ai_busy), or until a warming cache is likely ready (tool_warming, 2–15).","schema":{"type":"integer","minimum":1}},"IdempotentReplayed":{"description":"true when the response is the stored replay of an earlier request with the same Idempotency-Key.","schema":{"const":"true"}}}}}