URL Verification
Pre-verify URLs before sending SMS or email messages containing links
URL verification ensures that links in your SMS and email messages are safe and compliant. All URLs in SMS and email messages must be verified before the message can be sent.
Why URL Verification?
Carriers and email providers actively filter messages containing malicious or suspicious links. URL verification helps you:
- Prevent delivery failures - Messages with unverified or blocked URLs won't be delivered
- Protect your reputation - Avoid being flagged as a spam sender
- Ensure compliance - Meet carrier requirements for SMS messaging
- Block malicious links - Automatic detection of phishing and malware sites
How It Works
Extract URLs
When you send a message, Zavu extracts all URLs from the content
Check Verification Status
Each URL is checked against your verified URLs list
Automatic Verification
New URLs are automatically verified against Google Web Risk API
Delivery Decision
Safe URLs are approved; malicious URLs block the message
URL Verification Status
| Status | Description |
|---|---|
pending | URL submitted, awaiting verification |
approved | URL verified as safe |
rejected | URL rejected by security team |
malicious | URL flagged as potentially harmful |
Pre-Verifying URLs
Submit URLs for verification before using them in messages:
import Zavudev from '@zavudev/sdk';
const zavu = new Zavudev();
const result = await zavu.urls.submitForVerification({
url: "https://mystore.example.com/sale",
});
console.log(`URL ID: ${result.url.id}`);
console.log(`Status: ${result.url.status}`); // "approved" for safe URLs
console.log(`Domain: ${result.url.domain}`);
Approved Response
JSON{ "url": { "id": "url_abc123", "url": "https://mystore.example.com/sale", "domain": "mystore.example.com", "status": "approved", "approvalType": "auto_web_risk", "createdAt": "2024-01-15T10:30:00.000Z" } }
Blocked URLs
URL Shorteners
URL shorteners are always blocked because they hide the destination URL:
terminal# These will be rejected bit.ly/abc123 t.co/xyz789 tinyurl.com/short
Malicious URLs
URLs flagged by Google Web Risk as malicious are automatically blocked:
JSON{ "code": "url_malicious", "message": "URL has been flagged as potentially harmful by security systems", "details": { "urls": ["https://malicious-site.example"], "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING"], "warning": "fraud_prevention" } }
Listing Verified URLs
View all URLs that have been verified for your project:
const { items, nextCursor } = await zavu.urls.listVerified({
status: "approved",
limit: 50,
});
for (const url of items) {
console.log(`${url.domain}: ${url.url} (${url.status})`);
}
Response
JSON{ "items": [ { "id": "url_abc123", "url": "https://mystore.example.com/sale", "domain": "mystore.example.com", "status": "approved", "approvalType": "auto_web_risk", "createdAt": "2024-01-15T10:30:00.000Z" }, { "id": "url_def456", "url": "https://mystore.example.com/products", "domain": "mystore.example.com", "status": "approved", "approvalType": "auto_web_risk", "createdAt": "2024-01-15T10:25:00.000Z" } ], "nextCursor": null }
Getting URL Details
const url = await zavu.urls.retrieveDetails("url_abc123");
console.log(`URL: ${url.url}`);
console.log(`Status: ${url.status}`);
console.log(`Verified at: ${url.createdAt}`);
Automatic Verification in Messages
When you send a message with URLs, Zavu automatically extracts and verifies them:
TypeScript// URLs in message are automatically verified const message = await zavu.messages.send({ to: "+14155551234", text: "Check out our sale: https://mystore.example.com/sale", }); // If URL is not pre-verified, it will be checked automatically // If blocked, the message status will be "pending_url_verification"
Message Status: pending_url_verification
If a message contains an unverified URL that requires manual review:
JSON{ "id": "msg_abc123", "to": "+14155551234", "status": "pending_url_verification", "text": "Check out: https://new-domain.example.com/page" }
Best Practices
Register and verify your own domains for consistent delivery
Always use full URLs instead of shortening services
Verify all URLs before launching broadcast campaigns
Always use HTTPS URLs for better security and trust
Domain-Level Verification
Once a URL is verified, subsequent URLs from the same domain are typically verified faster:
TypeScript// First URL from domain - full verification await zavu.urls.submitForVerification({ url: "https://mystore.example.com/sale" }); // Additional URLs from same domain - faster verification await zavu.urls.submitForVerification({ url: "https://mystore.example.com/products" }); await zavu.urls.submitForVerification({ url: "https://mystore.example.com/about" });
Complete Example
TypeScriptimport Zavudev from '@zavudev/sdk'; const zavu = new Zavudev(); async function sendCampaignWithLinks() { const campaignUrls = [ "https://mystore.example.com/sale", "https://mystore.example.com/new-arrivals", ]; // 1. Pre-verify all campaign URLs console.log("Verifying campaign URLs..."); for (const url of campaignUrls) { try { const result = await zavu.urls.submitForVerification({ url }); console.log(`${url}: ${result.url.status}`); if (result.url.status !== "approved") { throw new Error(`URL not approved: ${url}`); } } catch (error) { console.error(`Failed to verify ${url}:`, error); return; } } // 2. Send messages with verified URLs console.log("\nSending campaign..."); const message = await zavu.messages.send({ to: "+14155551234", text: `Sale alert! Shop now: ${campaignUrls[0]}`, }); console.log(`Message sent: ${message.id} (${message.status})`); } sendCampaignWithLinks();
Troubleshooting
URL Rejected
If your URL is rejected:
- Check that it's not a URL shortener
- Ensure the URL is accessible (not 404)
- Verify the domain has valid SSL
- Contact support if you believe it's a false positive
Message Stuck in pending_url_verification
- Submit the URL manually using
POST /v1/urls - Wait for verification (usually seconds)
- The message will be released once approved
Malicious URL Detection
If your legitimate URL is flagged as malicious:
- Check Google Safe Browsing for your domain
- Resolve any security issues on your site
- Request a review from Google
- Contact Zavu support with the resolution details