{"name":"Filtrat — Verify Single Email","nodes":[{"parameters":{},"id":"manual-trigger","name":"Manual Trigger","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[240,300]},{"parameters":{"assignments":{"assignments":[{"id":"email","name":"email","value":"john.doe@company.com","type":"string"},{"id":"resolve_catchall","name":"resolve_catchall","value":false,"type":"boolean"}]},"options":{}},"id":"set-input","name":"Set Test Input","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[460,300]},{"parameters":{"method":"GET","url":"https://api.filtrat.io/v1/billing/status","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"id":"check-balance","name":"Check Balance","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[680,300],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.total_balance }}","rightValue":1,"operator":{"type":"number","operation":"gt"}}]}},"id":"enough-credits","name":"Enough Credits?","type":"n8n-nodes-base.if","typeVersion":2,"position":[900,300]},{"parameters":{"method":"POST","url":"https://api.filtrat.io/v1/verify/email","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendBody":true,"specifyBody":"json","jsonBody":"={{ JSON.stringify({ email: $('Set Test Input').item.json.email, resolve_catchall: $('Set Test Input').item.json.resolve_catchall }) }}"},"id":"verify-email","name":"Verify Email","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[1120,200],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}},"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"errorMessage":"={{ 'Insufficient Filtrat credits (balance: ' + $json.total_balance + '). Top up at app.filtrat.io.' }}"},"id":"error-low-credits","name":"Error: Low Credits","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1120,400]},{"parameters":{"content":"## Setup — do this first\n\n1. **Create a Filtrat API credential:**\n   - Go to Credentials → Add Credential → Header Auth\n   - Name: `Filtrat API`\n   - Header Name: `Authorization`\n   - Header Value: `Bearer ak_your_key_here`\n   - Get your key in filtrat on API → API keys: [filtrat.io/app/api?tab=keys](https://filtrat.io/app/api?tab=keys)\n\n2. **Edit the \"Set Test Input\" node** — change the email to the address you want to verify\n\n3. **Set `resolve_catchall` to `true`** if you want catch-all domains resolved to verified/invalid (costs 5 extra credits)\n\n4. **Click \"Test Workflow\"** to run","width":420,"height":380,"color":4},"id":"note-setup","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[220,-120]},{"parameters":{"content":"## Results\n\n- **verified** — mailbox exists (1 cr)\n- **invalid** — mailbox not found (1 cr)\n- **catchall** — domain accepts all (free)\n- **risky** — inconclusive (free)\n- **unknown** — could not verify (free)\n\nTo use in production: replace Manual Trigger with your own trigger (Webhook, Schedule, etc.) and replace the Set node with your incoming data.","width":380,"height":260,"color":6},"id":"note-results","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[880,-120]}],"connections":{"Manual Trigger":{"main":[[{"node":"Set Test Input","type":"main","index":0}]]},"Set Test Input":{"main":[[{"node":"Check Balance","type":"main","index":0}]]},"Check Balance":{"main":[[{"node":"Enough Credits?","type":"main","index":0}]]},"Enough Credits?":{"main":[[{"node":"Verify Email","type":"main","index":0}],[{"node":"Error: Low Credits","type":"main","index":0}]]}},"pinData":{},"settings":{"executionOrder":"v1"},"staticData":null,"tags":[{"name":"filtrat","id":"filtrat"},{"name":"email-verification","id":"email-verification"}],"triggerCount":0,"versionId":"single-verify-v2"}