Invoice Verify — Canada
Fraud detection for invoices from Canadian companies. Verifies the invoicing company exists, validates payment details (IBAN, BIC), screens for sanctions and adverse media, analyzes sender domain trustworthiness, and produces a plain-language fraud assessment.
invoice-verify-ca What it runs
- Canadian Company Data
Source: Corporations Canada (ISED) official JSON API — numeric lookups; site search for name lookups
- IBAN Validation
Source: Algorithmic validation (ISO 13616 IBAN standard + bank registry)
- Bank BIC Lookup
Source: SWIFT/BIC directory (bank identification)
- Sanctions Check
Source: Dilisense consolidated (OFAC SDN, EU FSF, UN SC, UK Sanctions List, CH SECO, BIS, World Bank, EBRD, ADB + 125 national sanctions/debarment lists; full attribution at https://dilisense.com/en/sources/sanction-sources)
- Adverse Media Check
Source: Dilisense Adverse Media (235k+ news sources, FATF-categorized) primary; Serper.dev (Google search) fallback
- Invoice Validation
Source: Algorithmic (invoice field validation, cross-check calculations)
- Domain Reputation
Source: Threat intelligence feeds (multi-source scoring)
- WHOIS Lookup
Source: WHOIS protocol (ICANN-accredited registrar databases)
- Email Validation
Source: Algorithmic (syntax) + DNS protocol (MX record verification)
- DNS Lookup
Source: DNS protocol (authoritative nameservers)
- Redirect Trace
Source: HTTP fetch (manual redirect following, full chain capture)
- Risk Summary Writer
Source: Claude Sonnet (Anthropic API)
Written by an AI model from the other steps’ results, for a person to review. It does not make the decision.
The answer returns every step’s result, so your agent can show or check each one.
Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
bic | string | No | BIC/SWIFT code from the invoice |
iban | string | No | IBAN from the invoice payment details |
sender_url | string | No | URL from the invoice for redirect tracing |
vat_number | string | No | VAT number from the invoice |
company_name | string | Yes | Canadian company name or corporation number |
invoice_data | object | No | Structured invoice data for validation |
sender_email | string | No | Email address of the invoice sender |
sender_domain | string | No | Domain of the invoice sender |
How to call it
# Needs an API key. The whole check is charged once, at the listed price.
curl -X POST https://api.strale.io/v1/solutions/invoice-verify-ca/execute \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"inputs": {
"bic": "ESSESESS",
"iban": "SE4550000000058398257466",
"company_name": "Shopify Inc",
"sender_domain": "example.com"
},
"max_price_cents": 250
}' # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i -X POST https://api.strale.io/x402/v2/solutions/invoice-verify-ca \
-H 'Content-Type: application/json' \
-d '{
"bic": "ESSESESS",
"iban": "SE4550000000058398257466",
"company_name": "Shopify Inc",
"sender_domain": "example.com"
}' The bundle’s published example input.
Limitations
Covers federally incorporated companies — provincially registered businesses may have limited information
From step: Canadian Company Data
What to do instead: For provincial companies, supplement with the relevant provincial registry (e.g., Ontario ONBIS, BC Registry)
Director names are not included. `director_limits` gives the minimum and maximum permitted by the articles, rather than the current number of directors.
From step: Canadian Company Data
What to do instead: Order a corporate profile from Corporations Canada, or check the corporation's own filings
Corporation-number and business-number lookups read the official API directly. Name lookups extract results from the Corporations Canada website using AI and can return less precise fields.
From step: Canadian Company Data
What to do instead: Provide the corporation number for a fully algorithmic answer
`name_history` can contain only the current name even when the registry’s activity history records a name change. An empty list does not prove that the company has never been renamed.
From step: Canadian Company Data
What to do instead: Check the corporation's activity history on Corporations Canada for name-change events
API response bodies above 4 MiB are refused during download rather than parsed.
From step: Canadian Company Data
Validates structure and checksum only — does not confirm the account is open or active
From step: IBAN Validation
What to do instead: Use a SEPA test transaction (€0.01) or bank account verification API to confirm the account is live before large transfers
Covers all SEPA-zone IBANs. Non-SEPA country IBANs validated structurally but bank lookup may be incomplete
From step: IBAN Validation
What to do instead: For non-SEPA IBANs, cross-reference the bank code portion against SWIFT's IBAN Plus directory
BIC directory updated monthly — newly merged or renamed banks may show outdated information for up to 30 days
From step: Bank BIC Lookup
What to do instead: Cross-check the returned BIC against SWIFT's online BIC search (swift.com) for recently merged institutions
Database covers major banks globally. Small regional banks or credit unions may not be found
From step: Bank BIC Lookup
What to do instead: If no result is returned, look up the BIC via the national central bank's payment system participant list
Sanctions lists updated daily from OFAC, EU, and UN sources — newly sanctioned entities may take up to 24 hours to appear
From step: Sanctions Check
What to do instead: For same-day compliance, subscribe to OFAC's RSS feed and cross-reference against today's additions
Name matching uses fuzzy logic — common names may produce false positives. Always verify flagged results
From step: Sanctions Check
What to do instead: Filter results by match confidence score and verify flagged entities against the primary sanctions list PDF
AI-classified results — may miss subtle risk signals or produce false positives
From step: Adverse Media Check
Limited to publicly indexed web content — paywalled news sources not covered
From step: Adverse Media Check
English-language bias — non-English media coverage may be underrepresented
From step: Adverse Media Check
Recency depends on search index freshness (typically 24-48h delay)
From step: Adverse Media Check
AI-categorized results — may produce false positives for common names or names that appear in unrelated news contexts
From step: Adverse Media Check
What to do instead: Review top articles manually to confirm relevance. Use entity_type parameter to improve precision
Screens 235,000+ sources but paywalled content may not be fully indexed. Non-English language coverage varies by region
From step: Adverse Media Check
What to do instead: For high-stakes screening, supplement with manual searches in local-language news sources
Articles typically appear in near real-time but some sources may have a 24-48 hour indexing delay
From step: Adverse Media Check
What to do instead: For breaking news events, supplement with direct web search
Validates invoice structure and arithmetic — cannot verify that billed items were actually delivered or that prices match contracts
From step: Invoice Validation
What to do instead: Use as a structural pre-check before manual review of business terms and delivery confirmation
Reputation scores aggregate multiple blocklists — a single listing may not indicate actual malicious activity
From step: Domain Reputation
What to do instead: Check which specific blocklist flagged the domain in the response details and verify the listing reason before blocking
Blocklist data refreshed daily — recently resolved issues may still show negative reputation for 24-48 hours
From step: Domain Reputation
What to do instead: If a domain was recently cleaned, re-check after 48 hours and use the trend direction to assess improvement
Some registrars rate-limit WHOIS queries — bulk lookups may see slower response times
From step: WHOIS Lookup
What to do instead: Batch lookups with 1-2 second delays between requests, or use the RDAP protocol endpoint when available
GDPR-redacted registrations (common for EU domains) show limited registrant information
From step: WHOIS Lookup
What to do instead: Use the abuse contact email from the WHOIS response to request registrant details through the registrar's disclosure process
Disposable email detection covers major providers but new throwaway domains may not be flagged
From step: Email Validation
What to do instead: Check the domain’s age when investigating suspicious traffic.
No mailbox is contacted. A made-up or bouncing address can return valid if its syntax is correct, its domain has mail servers, and it is not flagged as disposable. Catch-all domains are one example; mailbox existence and delivery are never checked.
From step: Email Validation
What to do instead: Require confirmation through a verification link before relying on a mailbox.
Results reflect current DNS propagation — recent changes may take up to 48 hours to appear
From step: DNS Lookup
What to do instead: Query the authoritative nameserver directly (returned in the NS records) to see changes before full propagation
Follows HTTP redirects (301, 302, 307, 308) — JavaScript-based redirects and meta refresh tags are not traced
From step: Redirect Trace
What to do instead: For JavaScript redirects, use screenshot-url or url-to-markdown to see the final rendered destination
Risk narratives are generated by AI and may oversimplify complex scenarios. The narrative should be reviewed by a qualified professional for high-stakes decisions.
From step: Risk Summary Writer
The AI is instructed to follow specific wording rules (e.g., never say "safe to pay") but adherence is not 100% guaranteed. Automated wording checks are recommended.
From step: Risk Summary Writer
Narrative quality depends on the completeness of input check_results. Missing or incomplete check data will produce less useful narratives.
From step: Risk Summary Writer