{"name":"verza","description":"South African verification and KYB checks: identity number validation with safe decode, VAT number validation, phone and email validation, domain age, IP screening, a business pre-screen, a published risk score, a site audit of one public URL, NCA credit-agreement lawfulness verdicts against the Regulation 42 interest caps, and bulk validation of up to 50 identifiers in one settled call. CIPC number format is free. Full CIPC registry lookup is in development. Every check states what it does and does not confirm, and invalid input is rejected free with a 400 before any payment. The site audit is HTTP 503, not 402, when its render worker cannot run the job. Paid per call via the x402 protocol (USDC on Base), no account needed. A free API key tier is available at /signup.","base_url":"https://verza.dev","endpoints":[{"slug":"vat-validate","title":"VAT number validation","description":"Structural validation of a South African VAT registration number (VAT vendor number): 10 digits, leading 4, check digit. Use it to screen a supplier or customer VAT number before invoicing or claiming input VAT. Free. Confirms format only, not active SARS registration.","method":"GET","url":"https://verza.dev/v1/vat-validate","example":"https://verza.dev/v1/vat-validate?vat=4012345676","params":{"vat":"string, required: the VAT number to validate"},"price":"free"},{"slug":"id-validate","title":"SA ID number validation","description":"Structural validation of a South African identity number with safe decode: Luhn check digit, birth date, gender and citizenship segments (citizen or permanent resident). The structural step in KYC, KYB and customer onboarding or due diligence workflows: derive date of birth, age, gender and citizenship without storing the identity. Run it before a paid registry lookup rather than instead of one: a Home Affairs check is priced in rands per query, so screening structurally first means you never spend one on a number that could not have been issued. Stateless, never stored or logged (POPIA-conscious by construction). Confirms structure only, not registration with Home Affairs. Also callable as /v1/id-validate/{id}.","method":"GET","url":"https://verza.dev/v1/id-validate","example":"https://verza.dev/v1/id-validate?id=8001015009087","alias":"https://verza.dev/v1/id-validate/{id}","params":{"id":"string, required: the 13-digit SA identity number"},"price":"$0.01"},{"slug":"loan-check","title":"NCA loan agreement verification (Reg 42 Verify)","description":"Independent lawfulness check of a South African credit agreement's interest rate against the National Credit Act (NCA) Regulation 42 maximum rate caps, the statutory interest rate cap that replaced the old usury limits: the maximum rate is fixed at the repo rate on the date the agreement was concluded. Covers every Reg 42 credit type including mortgage agreements, credit facilities, unsecured credit, short-term credit and developmental credit. Verdict, exact cap, excess and full workings, from daily-audited SARB and gazette data, for credit providers, compliance teams and the interest-rate limb of a reckless-lending or affordability review. Covers every agreement under the current Regulation 42 table (concluded 2016-05-06 or later). Also callable as /v1/loan-check/{credit_type}/{annual_rate_percent}/{date_concluded}.","method":"GET","url":"https://verza.dev/v1/loan-check","example":"https://verza.dev/v1/loan-check?credit_type=unsecured&annual_rate_percent=28.5&date_concluded=2024-03-15","alias":"https://verza.dev/v1/loan-check/{credit_type}/{annual_rate_percent}/{date_concluded}","params":{"credit_type":"string, required: unsecured | mortgage | credit_facility | developmental | other | short_term | incidental","annual_rate_percent":"number, required for repo-linked types (unsecured, mortgage, credit_facility, developmental, other): the annual interest rate charged","date_concluded":"date YYYY-MM-DD, required for repo-linked types: the date the agreement was entered into","monthly_rate_percent":"number, for monthly-capped types (short_term, incidental): the monthly interest rate charged","subsequent_loan":"true or false, short_term only: a subsequent loan in the same calendar year (3% per month cap instead of 5%)","monthly_service_fee_zar":"number, optional: the monthly service fee charged, checked against the cap"},"price":"$0.25"},{"slug":"bulk-validate","title":"Bulk identifier validation","description":"Validate up to 50 South African identifiers in one settled call: ID numbers, VAT numbers, or a mix. Batch screening of a customer or supplier list for structurally invalid South African identifiers, for onboarding, KYC and KYB compliance clean-ups. Same checks and same honest scope as the single endpoints, with a summary of how many passed. Cheaper than five individual ID checks and a single round trip instead of fifty.","method":"POST","url":"https://verza.dev/v1/bulk-validate","example":"https://verza.dev/v1/bulk-validate","example_body":{"ids":["8001015009087","0501015009084"],"vats":["4012345676"]},"params":{"ids":"array of 13-digit SA ID numbers, at least one: up to 50 combined with vats","vats":"array of SA VAT numbers, optional: up to 50 combined with ids"},"price":"$0.05"},{"slug":"contact-validate","title":"SA contact and identity validation","description":"Validate a South African phone number, an email address and an optional ID number in one call. Phone returns E.164, line type and the original network allocation, which is not the current network because the number may have been ported. Email checks syntax, MX, disposable and role flags, and does not confirm the mailbox exists. A phone-only request is one check and one charge.","method":"POST","url":"https://verza.dev/v1/contact-validate","example":"https://verza.dev/v1/contact-validate","example_body":{"phone":"082 123 4567","email":"info@example.co.za","id":"8001015009087"},"params":{"phone":"string, at most 32 characters: a South African phone number. At least one of phone, email or id","email":"string, at most 254 characters: an email address. At least one of phone, email or id","id":"string, exactly 13 digits: an SA identity number. At least one of phone, email or id"},"price":"$0.02"},{"slug":"company-validate","title":"CIPC enterprise number check","description":"Decode a South African CIPC enterprise number (YYYY/NNNNNN/TT): registration year, sequence and entity type. Free. It confirms the number is well formed. It does not confirm the enterprise exists, is in business, or its name. CIPC offers no free machine-readable registry lookup. Also callable as /v1/company-validate/{reg}.","method":"GET","url":"https://verza.dev/v1/company-validate","example":"https://verza.dev/v1/company-validate?reg=2015/123456/07","alias":"https://verza.dev/v1/company-validate/{reg}","params":{"reg":"string, required: CIPC enterprise number YYYY/NNNNNN/TT. Digits and the separators / - or space, at most 20 characters"},"price":"free"},{"slug":"domain-check","title":"Domain age and registry status","description":"Domain age and registry status from RDAP via the IANA bootstrap. A South African .za name is refused. Also reports whether an address record and an MX record exist. Dates and status only. It does not confirm who owns or runs the domain. Also callable as /v1/domain-check/{domain}.","method":"GET","url":"https://verza.dev/v1/domain-check","example":"https://verza.dev/v1/domain-check?domain=example.com","alias":"https://verza.dev/v1/domain-check/{domain}","params":{"domain":"string, required: a domain name, at most 253 characters. A scheme, a path and a leading www. are stripped. Internationalized names are converted to punycode. A .za name is rejected"},"price":"$0.01"},{"slug":"ip-check","title":"IP address screening","description":"Screen an IP address against the Tor exit list and published AWS, Google Cloud and Cloudflare ranges, and name the country and network from public registry data. It does not locate a person. VPN and proxy detection beyond Tor exits and known cloud ranges is not offered.","method":"POST","url":"https://verza.dev/v1/ip-check","example":"https://verza.dev/v1/ip-check","example_body":{"ip":"41.0.0.1"},"params":{"ip":"string, required: an IPv4 or IPv6 address, at most 45 characters. Private and reserved addresses are rejected"},"price":"$0.01"},{"slug":"business-verify","title":"Business pre-screen","description":"Supplier pre-screen in one call: CIPC number format, VAT number format, domain age and email DNS. Structural and public DNS checks only. It does not confirm the company exists at CIPC, is VAT-registered at SARS, or holds a B-BBEE level.","method":"POST","url":"https://verza.dev/v1/business-verify","example":"https://verza.dev/v1/business-verify","example_body":{"reg":"2015/123456/07","vat":"4123456789","domain":"example.co.za","email":"accounts@example.co.za"},"params":{"reg":"string, optional: CIPC enterprise number. The body must include a non-.za domain or an email. reg and vat alone are free at /v1/company-validate and /v1/vat-validate","vat":"string, optional: SA VAT number. The body must include a non-.za domain or an email. reg and vat alone are free at /v1/company-validate and /v1/vat-validate","domain":"string, optional: domain name. A .za name does not satisfy the body","email":"string, optional: contact email, at most 254 characters. An email satisfies the body"},"price":"$0.02"},{"slug":"risk-score","title":"Risk score","description":"A points sum of named rules over a South African phone number, an email address, an ID number and an IP address. The rules and the points are published. The score is an input to a person, not a decision, and service must not be refused on this score alone.","method":"POST","url":"https://verza.dev/v1/risk-score","example":"https://verza.dev/v1/risk-score","example_body":{"phone":"082 123 4567","email":"thabo@example.co.za","id":"8001015009087","ip":"41.0.0.1","declared_dob":"1980-01-01"},"params":{"phone":"string, optional: a South African phone number, at most 32 characters. At least two of phone, email, id, ip, declared_dob","email":"string, optional: an email address, at most 254 characters. At least two of phone, email, id, ip, declared_dob","id":"string, optional: a 13-digit SA identity number. At least two of phone, email, id, ip, declared_dob","ip":"string, optional: an IPv4 or IPv6 address. At least two of phone, email, id, ip, declared_dob","declared_dob":"date YYYY-MM-DD, optional: a date of birth the caller says is true. Requires id. At least two of phone, email, id, ip, declared_dob"},"price":"$0.05"},{"slug":"site-audit","title":"Site audit","description":"Audit one public http or https page: Lighthouse scores, DNS, SPF, DMARC, DKIM selectors, TLS, security headers and subdomains. Verza calls a render worker and does not fetch the page itself. An empty body is a 402 when the worker can run. A private or loopback host is HTTP 400 after payment is verified and is not settled. A busy or unreachable worker is HTTP 503 with Retry-After and is not settled.","method":"POST","url":"https://verza.dev/v1/site-audit","example":"https://verza.dev/v1/site-audit","example_body":{"url":"https://example.com"},"params":{"url":"string, required: a public http or https URL of at most 2048 characters"},"price":"$0.50"}],"roadmap":[{"endpoint":"/v1/company-check","status":"in development","description":"Full CIPC registry lookup. Needs CIPC API access; no free source exists. Free structural check available now at /v1/company-validate."},{"endpoint":"/v1/tender-awards","status":"planned","description":"Government tender award history by supplier. Held back until a source that actually publishes award records is verified; the live eTenders OCDS feed currently carries none."}],"privacy":"Stateless: identity inputs are validated in memory and never stored. Access logs record path and status only, never query parameters.","disclaimer":"Independent verification service over public data and standard checksum algorithms. Structural validation does not confirm registration with SARS, Home Affairs or any authority. No identity data is stored; identity query parameters are never logged."}