🚀 Getting Started

Base URL

All API requests should be made to: https://skwipe.com/api/v1/

GET /status/
Check API status and health. Requires authentication.
curl -X GET "https://skwipe.com/api/v1/status/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "operational", "timestamp": "2024-07-29T10:00:00Z", "version": "1.0.0", "services": { "database": "operational", "cache": "operational", "email_service": "operational", "payment_gateway": "operational" } }
GET /key-info/
Get information about your API key, including plan, status, and current credit balance.
curl -X GET "https://skwipe.com/api/v1/key-info/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "api_key": { "plan": "pro", "status": "active", "created_at": "2024-05-01T00:00:00Z", "expires_at": "2025-05-01T00:00:00Z", "last_used": "2024-07-29T09:55:00Z" }, "credits": { "search": 850, "email": 425, "contact": 210 }, "rate_limits": { "requests_per_minute": 1000, "requests_per_hour": 10000, "requests_per_day": 100000 } }

🏢 Companies API

GET /external/companies/
Search for companies with advanced filtering options. Costs 1 search credit per request. Results are paginated.

Query Parameters

Parameter Type Required Description
search string Optional General search across name, category, city, country, region. Multiple terms are ANDed.
name string Optional Filter by company name (case-insensitive, partial match).
city string Optional Filter by city (case-insensitive, partial match).
country string Optional Filter by country (case-insensitive, partial match).
region string Optional Filter by region/state (case-insensitive, partial match).
category string Optional Filter by business category, main_category, or sub_category (case-insensitive, partial match).
main_category string Optional Filter by main business category (case-insensitive, partial match).
industry string Optional Alias for category/main_category search.
has_email boolean ("true"/"false") Optional Filter companies that have (or don't have) email addresses.
has_website boolean ("true"/"false") Optional Filter companies that have (or don't have) a website.
has_phone boolean ("true"/"false") Optional Filter companies that have (or don't have) phone numbers.
page integer Optional Page number for pagination (default: 1). Max: 1000.
page_size integer Optional Number of results per page (default: 20, max: 100).
# Search for technology companies in San Francisco with email curl -X GET "https://skwipe.com/api/v1/external/companies/?search=technology&city=San%20Francisco&has_email=true" \ -H "Authorization: Bearer YOUR_API_KEY" # Search by company name and paginate curl -X GET "https://skwipe.com/api/v1/external/companies/?name=Global%20Corp&page=2&page_size=10" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "results": [ { "id": 123, "name": "Innovatech Solutions", "address": "123 Innovation Drive", "postal_address": "Suite 100", "city": "San Francisco", "region": "CA", "country": "USA", "telephone_numbers_list": ["+1-555-0100"], "mobile_numbers_list": [], "emails_list": ["info@innovatech.com", "sales@innovatech.com"], "website": "https://innovatech.com", "category": "Software Development, Cloud Services", "main_category": "Technology", "sub_category": "Enterprise Software", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-07-20T14:45:00Z", "contact_count": 1, "email_count": 2 } // ... more results ], "pagination": { "page": 1, "page_size": 20, "total_results": 150, "total_pages": 8, "has_next": true, "has_previous": false }, "filters_applied": { "search": "technology", "name": "", "city": "San Francisco" // ... other applied filters } }, "credits_used": { "search": 1 }, "remaining_credits": { "search": 849, "email": 425, "contact": 210 } }

💼 Jobs API

GET /external/jobs/
Search for job listings with advanced filtering. Costs 1 search credit per request. Results are paginated.

Query Parameters

Parameter Type Required Description
search string Optional General search across job title, description, company, location, industry, and job function.
job_title string Optional Filter by job title (case-insensitive, partial match).
company string Optional Filter by company name (case-insensitive, partial match).
location string Optional Filter by job location (case-insensitive, partial match).
work_type string Optional Filter by work type (e.g., "full-time", "part-time", "contract", "internship"). Case-insensitive, exact match.
industry string Optional Filter by industry (case-insensitive, partial match).
experience_level string Optional Filter by experience level (e.g., "entry", "mid", "senior", "lead", "executive"). Case-insensitive, exact match.
job_function string Optional Filter by job function (e.g., "Engineering", "Sales"). Case-insensitive, partial match.
has_email boolean ("true"/"false") Optional Filter jobs that have (or don't have) a contact email.
remote boolean ("true"/"false") Optional Filter for remote jobs. Looks for "remote" in location, work_type, or description.
page integer Optional Page number for pagination (default: 1). Max: 1000.
page_size integer Optional Number of results per page (default: 20, max: 100).
# Search for remote software engineer jobs curl -X GET "https://skwipe.com/api/v1/external/jobs/?job_title=software%20engineer&remote=true&work_type=full-time" \ -H "Authorization: Bearer YOUR_API_KEY" # Search by company and experience level curl -X GET "https://skwipe.com/api/v1/external/jobs/?company=Innovatech&experience_level=senior&location=San%20Francisco" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "results": [ { "id": 456, "job_title": "Senior Software Engineer (Remote)", "job_description": "Join our dynamic team to build cutting-edge applications...", "company": "Innovatech Solutions", "location": "San Francisco, CA / Remote", "work_type": "full-time", "industry": "Technology", "salary": "$140,000 - $180,000 per year", "job_function": "Engineering", "minimum_qualification": "Bachelor's degree in Computer Science or related field.", "experience_level": "senior", "experience_length": "5+ years", "job_url": "https://innovatech.com/careers/senior-engineer", "email": "careers@innovatech.com", "created_at": "2024-07-10T09:15:00Z", "updated_at": "2024-07-25T11:00:00Z", "contact_count": 1 } // ... more results ], "pagination": { "page": 1, "page_size": 20, "total_results": 89, "total_pages": 5, "has_next": true, "has_previous": false }, "filters_applied": { "search": "", "job_title": "software engineer" // ... other applied filters } }, "credits_used": { "search": 1 }, "remaining_credits": { "search": 848, "email": 425, "contact": 210 } }

👥 Skwipe Contact API

⚠️ High Credit Cost

Skwipe Contact API endpoints use contact credits which are more expensive. Ensure you have sufficient credits.

POST /external/skwipe/enrich-profile/
Enrich a profile with contact information using LinkedIn URL, email, or name/company. Costs 1 contact credit per successful enrichment.

Request Body

* At least one identifier is required: linkedin_url, email, or (name + company)

Parameter Type Required Description
linkedin_url string Optional* Full LinkedIn profile URL.
email string Optional* Email address to enrich.
name string Optional* Person's full name (requires company if used).
company string Optional* Company name (requires name if used).
# Enrich by LinkedIn URL curl -X POST "https://skwipe.com/api/v1/external/skwipe/enrich-profile/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "linkedin_url": "https://www.linkedin.com/in/johndoeexample" }' # Enrich by name and company curl -X POST "https://skwipe.com/api/v1/external/skwipe/enrich-profile/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Jane Smith", "company": "Acme Corp" }'
{ "status": "success", "data": { "person": { "name": "Jane Smith", "first_name": "Jane", "last_name": "Smith", "email": "jane.s@acmecorp.com", "phone": "+1-555-0101", "location": "New York, NY", "title": "Marketing Manager", "seniority": "Manager", "linkedin_url": "https://www.linkedin.com/in/janesmithacme", "company": { "name": "Acme Corp", "domain": "acmecorp.com", "industry": "Manufacturing", "size": "501-1000 employees", "location": "New York, United States" }, "education": [ { "degree": "MBA", "school": "State University" } ], "experience": [ { "title": "Marketing Manager", "company": "Acme Corp" } ], "skills": ["Digital Marketing", "SEO", "Content Strategy"], "social_profiles": { "twitter": "https://twitter.com/janesmith", "facebook": null } }, "contact_info": { "work_emails": ["jane.s@acmecorp.com", "jsmith@acmecorp.com"], "personal_emails": ["jane.smith.personal@example.com"], "all_emails": ["jane.s@acmecorp.com", "jsmith@acmecorp.com", "jane.smith.personal@example.com"], "phones": ["+1-555-0101", "+1-555-0102"], "work_email_status": { "jane.s@acmecorp.com": "verified" } }, "enrichment_info": { "confidence_score": 0.92, "data_sources": ["multiple_verified_sources"], "last_verified": "2024-07-29T10:15:00Z", "match_type": "profile_match" } }, "credits_used": { "contact": 1 }, "remaining_credits": { "search": 848, "email": 425, "contact": 209 } }
GET /external/skwipe/search-contacts/
Search for contacts by various criteria. Costs 1 contact credit per request. Results are paginated.

Query Parameters

* At least one search criteria is required: company, title, location, industry, or name.

Parameter Type Required Description
company string Optional* Company name to search within.
title string Optional* Job title to search for.
location string Optional* Geographic location (e.g., "New York", "London, UK").
industry string Optional* Industry to search within.
seniority string Optional Seniority level (e.g., "manager", "director", "vp", "cxo", "entry", "senior").
department string Optional Department (e.g., "engineering", "sales", "marketing").
name string Optional* Person's full name or partial name.
page integer Optional Page number for pagination (default: 1).
page_size integer Optional Number of results per page (default: 25, max: 50).
# Search for Software Engineers at Google curl -X GET "https://skwipe.com/api/v1/external/skwipe/search-contacts/?company=Google&title=Software%20Engineer" \ -H "Authorization: Bearer YOUR_API_KEY" # Search for 'John Smith' with pagination curl -X GET "https://skwipe.com/api/v1/external/skwipe/search-contacts/?name=John%20Smith&page=2&page_size=10" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "contacts": [ { "id": "sk_contact_abc123xyz", "name": "Sarah Connor", "first_name": "Sarah", "last_name": "Connor", "email": "sarah.c@cyberdyne.com", "verified_email": true, "phone": "+1-555-0103", "title": "Lead Software Engineer", "seniority": "lead", "department": "Engineering", "linkedin_url": "https://www.linkedin.com/in/sarahconnor", "company": { "name": "Cyberdyne Systems", "domain": "cyberdyne.com", "industry": "AI Research", "size": "1001-5000 employees", "location": "Sunnyvale, CA" }, "location": "Los Angeles, CA", "confidence_score": 0.95, "contact_info": { "work_emails": ["sarah.c@cyberdyne.com"], "personal_emails": [], "all_emails": ["sarah.c@cyberdyne.com"], "phones": ["+1-555-0103"], "work_email_status": {"sarah.c@cyberdyne.com": "verified"} } } // ... more contacts ], "pagination": { "page": 1, "page_size": 25, "total_results": 75, "total_pages": 3, "has_next": true, "has_previous": false }, "search_info": { "query": { "company": "Cyberdyne Systems", "title": "Software Engineer" // ... other query params }, "data_source": "proprietary_database", "search_time": "1.23 seconds" } }, "credits_used": { "contact": 1 }, "remaining_credits": { "search": 848, "email": 425, "contact": 208 } }
POST /external/skwipe/search-contacts/
Advanced search for contacts with complex filter combinations. Costs 2 contact credits per request.

Request Body

Parameter Type Required Description
search_criteria object Required Main search criteria. E.g., {"company": "Acme Corp", "title": "Engineer"}. Valid keys: company, title, location, industry, name.
filters object Optional Additional filters. E.g., {"seniority": "senior", "skills": ["Python", "Django"]}. Valid keys: seniority, department, company_size, skills (list).
curl -X POST "https://skwipe.com/api/v1/external/skwipe/search-contacts/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "search_criteria": { "company": "Tech Solutions Inc.", "location": "New York" }, "filters": { "seniority": "manager", "department": "sales", "skills": ["B2B Sales", "Lead Generation"] } }'
{ "status": "success", "data": { "contacts": [ // ... array of contact objects similar to GET /search-contacts/ ], "search_metadata": { "total_scanned": 1500, "filters_applied": 3, "search_time": "2.45 seconds", "accuracy": "high" } }, "credits_used": { "contact": 2 }, "remaining_credits": { "search": 848, "email": 425, "contact": 206 } }

📧 Email Finder API

POST /external/email/find/
Find email addresses for individuals based on name and company, or LinkedIn URL. Costs 1 email credit per successful find.

Request Body

* Either linkedin_url or (first_name, last_name, and company) are required.

Parameter Type Required Description
linkedin_url string Optional* LinkedIn profile URL.
first_name string Optional* Person's first name.
last_name string Optional* Person's last name.
company string Optional* Company name.
domain string Optional Company domain (e.g., "company.com"). If not provided, it may be inferred.
# Find email by name and company curl -X POST "https://skwipe.com/api/v1/external/email/find/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "first_name": "John", "last_name": "Doe", "company": "Innovatech Solutions" }' # Find email by LinkedIn URL curl -X POST "https://skwipe.com/api/v1/external/email/find/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "linkedin_url": "https://www.linkedin.com/in/johndoeexample", "company": "Innovatech Solutions" }'
{ "status": "success", "data": { "email": "john.doe@innovatech.com", "confidence": 85, "sources": ["company_website", "social_media"], "verified": true, "person": { "first_name": "John", "last_name": "Doe", "company": "Innovatech Solutions", "linkedin": "https://www.linkedin.com/in/johndoeexample" } }, "credits_used": { "email": 1 }, "remaining_credits": { "search": 848, "email": 424, "contact": 206 } }
POST /external/email/verify/
Verify if an email address is valid and deliverable. This is a free endpoint and does not consume credits.

Request Body

Parameter Type Required Description
email string Required The email address to verify.
curl -X POST "https://skwipe.com/api/v1/external/email/verify/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "john.doe@innovatech.com" }'
{ "status": "success", "data": { "email": "john.doe@innovatech.com", "valid": true, "deliverable": true, "disposable": false, "risk_level": "low", "mx_records": true, "smtp_check": true } }
POST /external/email/bulk-find/
Find emails for a list of contacts. Costs 1 email credit per contact successfully processed.

Request Body

Parameter Type Required Description
contacts array of objects Required A list of contact objects. Each object should contain first_name, last_name, and company.
curl -X POST "https://skwipe.com/api/v1/external/email/bulk-find/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contacts": [ { "first_name": "John", "last_name": "Doe", "company": "Innovatech Solutions" }, { "first_name": "Jane", "last_name": "Smith", "company": "Acme Corp" } ] }'
{ "status": "success", "data": { "results": [ { "input": { "first_name": "John", "last_name": "Doe", "company": "Innovatech Solutions" }, "email": "john.doe@innovatech.com", "confidence": 80, "verified": true, "sources": ["company_website"] }, { "input": { "first_name": "Jane", "last_name": "Smith", "company": "Acme Corp" }, "email": "jane.smith@acmecorp.com", "confidence": 80, "verified": true, "sources": ["company_website"] } ], "total_processed": 2, "successful": 2 }, "credits_used": { "email": 2 }, "remaining_credits": { "search": 848, "email": 422, "contact": 206 } }

📤 Data Export API

💡 Export Process

Data exports are processed asynchronously. You will receive an export_id to check the status. Once completed, you can download the file using the provided download_url from the status check endpoint.

POST /external/export/companies/
Initiate an asynchronous export of company data. Costs 1 search credit per 100 records. Maximum 10,000 records per export.

Request Body

Parameter Type Required Description
query string Optional General search query (similar to company search).
filters object Optional Object containing filters (e.g., {"city": "London", "has_email": true}). See Companies API for filter options.
format string Optional Export format: "csv" or "json" (default: "csv").
fields array Optional List of company fields to include in the export (e.g., ["name", "city", "emails", "website"]). Defaults to all common fields.
limit integer Optional Maximum number of records to export (default: 1000, max: 10,000).
curl -X POST "https://skwipe.com/api/v1/external/export/companies/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "query": "technology", "filters": { "city": "San Francisco", "has_email": true }, "format": "csv", "fields": ["name", "city", "emails", "website"], "limit": 1000 }'
{ "status": "success", "data": { "export_id": "export_20240729_103000_abc123", "status": "processing", "download_url": "/api/v1/external/export/download/export_20240729_103000_abc123/", "estimated_completion": "2-5 minutes", "query": "technology", "filters": { "city": "San Francisco", "has_email": true }, "format": "csv", "fields": ["name", "city", "emails", "website"], "estimated_records": 850 }, "credits_used": { "search": 9 }, // Assuming 850 records -> ceil(850/100) = 9 credits "remaining_credits": { "search": 839, "email": 422, "contact": 206 } }
POST /external/export/contacts/
Initiate an asynchronous export of contact data. Costs 1 contact credit per 50 records. Maximum 10,000 records per export.

Request Body

Parameter Type Required Description
query string Optional General search query for contacts (e.g., "Sales Manager in Tech").
filters object Optional Object containing filters (e.g., {"company": "Acme", "title": "Engineer"}). See Skwipe Contact API search for filter options.
format string Optional Export format: "csv" or "json" (default: "csv").
fields array Optional List of contact fields to include (e.g., ["name", "email", "company", "title", "linkedin_url"]).
limit integer Optional Maximum number of records to export (default: 1000, max: 10,000).
curl -X POST "https://skwipe.com/api/v1/external/export/contacts/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "filters": { "company": "Acme Corp", "title": "Marketing" }, "format": "json", "limit": 500 }'
{ "status": "success", "data": { "export_id": "contacts_export_20240729_103500_def456", "status": "processing", "download_url": "/api/v1/external/export/download/contacts_export_20240729_103500_def456/", "estimated_completion": "3-7 minutes", "filters": { "company": "Acme Corp", "title": "Marketing"}, "format": "json", "limit": 500 }, "credits_used": { "contact": 10 }, // Assuming 500 records -> ceil(500/50) = 10 credits "remaining_credits": { "search": 839, "email": 422, "contact": 196 } }
GET /external/export/download/{export_id}/
Check the status of an export job or download the completed export file.
curl -X GET "https://skwipe.com/api/v1/external/export/download/export_20240729_103000_abc123/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "export_id": "export_20240729_103000_abc123", "status": "completed", "download_url": "https://exports.skwipe.com/export_20240729_103000_abc123.csv", "file_size": "2.5 MB", "record_count": 850, "created_at": "2024-07-29T10:30:00Z", "completed_at": "2024-07-29T10:33:00Z", "expires_at": "2024-07-30T10:33:00Z" // File available for 24 hours } }
{ "status": "success", "data": { "export_id": "export_20240729_103000_abc123", "status": "processing", "download_url": null, "progress_percent": 60, "estimated_time_remaining": "1 minute", "created_at": "2024-07-29T10:30:00Z" } }

💳 Billing API

GET /billing/credits/
Get your current credit balance, usage information, and subscription tier details.
curl -X GET "https://skwipe.com/api/v1/billing/credits/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "credits": { "search": 839, "email": 422, "contact": 196 }, "usage_today": { "search": 15, "email": 8, "contact": 3 }, "tier": "pro", // From APIKey.plan "expires_at": "2025-05-01T00:00:00Z", // From APIKey.expires_at "last_purchase": "2024-07-20T14:30:00Z", // Example, could be from BillingTransaction "auto_recharge": { "enabled": false, "threshold": 100, "amount": 50.00 } } }
GET /billing/pricing/
Get current pricing information for individual credits, credit packages, and subscription tiers.
curl -X GET "https://skwipe.com/api/v1/billing/pricing/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "currency": "USD", "credit_prices": { // Per unit if bought individually "search": 0.05, "email": 0.10, "contact": 0.20 }, "minimum_purchase": { // Minimum quantity if bought individually "search": 100, "email": 50, "contact": 25 }, "credit_packages": [ // One-time purchase packages { "name": "Starter Pack", "price": 25.00, "credits": { "search": 500, "email": 250, "contact": 125 }, "description": "Perfect for small projects." }, { "name": "Pro Pack", "price": 50.00, "credits": { "search": 1000, "email": 500, "contact": 250 }, "description": "Great for growing businesses.", "popular": true } ], "subscription_tiers": [ { "name": "Basic", "monthly_price": 29.99, "credits_per_month": { "search": 1000, "email": 500, "contact": 250 }, "features": ["API Access", "Standard Support"] }, { "name": "Professional", "monthly_price": 79.99, "credits_per_month": { "search": 3000, "email": 1500, "contact": 750 }, "features": ["API Access", "Priority Support", "Webhooks"] } ] } }
POST /billing/purchase-credits/
Purchase additional credits. This will initiate a payment process via Paystack.

Request Body

Parameter Type Required Description
credits object Required An object specifying the number of credits to purchase for each type (e.g., {"search": 1000, "email": 500}). Minimum purchase amount of $5.00 applies.
callback_url string Optional URL to redirect the user to after payment completion (successful or failed).
curl -X POST "https://skwipe.com/api/v1/billing/purchase-credits/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "credits": { "search": 1000, "email": 500, "contact": 250 }, "callback_url": "https://yourapp.com/payment-status" }'
{ "status": "success", "data": { "transaction_id": "txn_20240729104000", "payment_url": "https://checkout.paystack.com/z6x8y2r1q", // Example Paystack URL "access_code": "access_z6x8y2r1q", // Example Paystack access code "reference": "ref_txn_20240729104000", // Example Paystack reference "amount": 125.00, // Calculated based on credits and pricing "credits_to_add": { "search": 1000, "email": 500, "contact": 250 }, "status": "pending", // User needs to complete payment "expires_at": "2024-07-29T10:55:00Z" // Payment link expiry } }

🛠️ Utilities API

GET /external/rate-limit/
Check your current API rate limit status, including usage and remaining requests for various time windows.
curl -X GET "https://skwipe.com/api/v1/external/rate-limit/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "current_usage": { "requests_this_minute": 45, "requests_this_hour": 2340, "requests_today": 15670 }, "limits": { // Based on your API key's plan "requests_per_minute": 1000, "requests_per_hour": 10000, "requests_per_day": 100000 }, "remaining": { "requests_this_minute": 955, "requests_this_hour": 7660, "requests_today": 84330 }, "reset_times": { // Seconds until reset "minute_reset": 15, "hour_reset": 1800, "day_reset": 32400 } } }
GET /external/features/
Get a list of feature flags available for your API key's current plan.
curl -X GET "https://skwipe.com/api/v1/external/features/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "feature_flags": { "bulk_operations": true, // e.g., bulk email find, batch processing "advanced_analytics": false, "webhook_support": true, "priority_support": false, "custom_integrations": false, "data_export": true, // CSV/JSON export functionality "api_v2_preview": false, // Access to upcoming API versions "real_time_notifications": true }, "plan": "pro", // Your current API key plan "upgrade_url": "/api/v1/billing/upgrade/" // Link to upgrade plan, null if on highest plan } }

🪝 Webhooks

Webhook Security

It's recommended to use the secret provided during webhook creation to verify the signature of incoming webhook payloads. The signature will be included in the X-Skwipe-Signature header.

POST /external/webhooks/
Create a new webhook subscription to receive real-time notifications for specific events. Feature might be plan-restricted.

Request Body

Parameter Type Required Description
url string (URL) Required The HTTPS URL where webhook payloads will be sent.
events array of strings Required A list of event types to subscribe to (e.g., ["credit.low", "export.completed", "batch.failed"]).
secret string Optional A secret string used to sign webhook payloads. If not provided, one will be generated. Max 64 chars.

Available Events: credit.low, credit.exhausted, export.completed, export.failed, batch.completed, batch.failed, apikey.status_changed.

curl -X POST "https://skwipe.com/api/v1/external/webhooks/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://yourapp.com/webhook-receiver", "events": ["export.completed", "credit.low"], "secret": "your-secure-webhook-secret" }'
{ "status": "success", "data": { "webhook_id": "wh_20240729_abc123xyz", "url": "https://yourapp.com/webhook-receiver", "events": ["export.completed", "credit.low"], "secret": "your-secure-webhook-secret", // Or a generated one "status": "active", "created_at": "2024-07-29T11:00:00Z" } }
GET /external/webhooks/
List all active webhook subscriptions for your API key.
curl -X GET "https://skwipe.com/api/v1/external/webhooks/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "webhooks": [ { "webhook_id": "wh_20240729_abc123xyz", "url": "https://yourapp.com/webhook-receiver", "events": ["export.completed", "credit.low"], "status": "active", "created_at": "2024-07-29T11:00:00Z", "last_triggered_at": "2024-07-29T11:05:00Z", "failure_count": 0 } // ... more webhooks ], "total": 1 } }

⚙️ Batch Processing

Batch Job Lifecycle

Submit a batch job and receive a batch_id. Poll the status endpoint using this ID. When completed, results might be delivered via webhook (if configured) or available for download via a URL provided in the status.

POST /external/batch/
Submit a batch processing job for tasks like bulk company search, email finding, or contact enrichment. Credit costs vary by job type and number of records. Feature might be plan-restricted.

Request Body

Parameter Type Required Description
type string Required The type of batch job. Valid types: "company_search", "email_find", "contact_enrich".
data_file string Required URL to a CSV file containing the data for batch processing, or base64 encoded CSV content. Max file size/records apply.
input_mapping object Optional For CSV data, maps CSV column headers to required input fields for the job type (e.g., {"firstName": "First Name Column", "companyName": "Company"}).
output_fields array of strings Optional Specifies which fields to include in the output results.
callback_url string (URL) Optional An HTTPS URL to receive a notification when the batch job is completed or fails.
curl -X POST "https://skwipe.com/api/v1/external/batch/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "email_find", "data_file": "https://yourstorage.com/contacts_to_find.csv", "input_mapping": { "first_name": "FirstName", "last_name": "LastName", "company": "Company Name" }, "output_fields": ["input_first_name", "input_last_name", "found_email", "confidence"], "callback_url": "https://yourapp.com/batch-webhook" }'
{ "status": "success", "data": { "batch_id": "batch_email_find_20240729_abc789", "type": "email_find", "status": "queued", "estimated_completion": "15-45 minutes", "callback_url": "https://yourapp.com/batch-webhook", "created_at": "2024-07-29T11:15:00Z", "estimated_records": 5000, // Inferred from data_file "estimated_credits": 5000 // Assuming 1 email credit per record for email_find } }
GET /external/batch/{batch_id}/
Get the status of a specific batch processing job.
curl -X GET "https://skwipe.com/api/v1/external/batch/batch_email_find_20240729_abc789/" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "batch_id": "batch_email_find_20240729_abc789", "type": "email_find", "status": "completed", "progress_percent": 100, "records_processed": 5000, "total_records": 5000, "successful_records": 4850, "failed_records": 150, "credits_consumed": 4850, "started_at": "2024-07-29T11:16:00Z", "completed_at": "2024-07-29T11:45:00Z", "results_url": "https://exports.skwipe.com/batch_results/batch_email_find_20240729_abc789.csv", "error_report_url": "https://exports.skwipe.com/batch_errors/batch_email_find_20240729_abc789_errors.csv" } }
{ "status": "success", "data": { "batch_id": "batch_email_find_20240729_abc789", "type": "email_find", "status": "processing", "progress_percent": 65, "records_processed": 3250, "total_records": 5000, "credits_consumed_so_far": 3100, "estimated_time_remaining": "8 minutes", "started_at": "2024-07-29T11:16:00Z", "results_url": null } }
GET /external/batch/
List all batch processing jobs submitted by your API key. Paginated.

Query Parameters

Parameter Type Required Description
status string Optional Filter by job status (e.g., "queued", "processing", "completed", "failed").
type string Optional Filter by job type (e.g., "email_find").
page integer Optional Page number for pagination (default: 1).
page_size integer Optional Number of results per page (default: 20, max: 100).
curl -X GET "https://skwipe.com/api/v1/external/batch/?status=completed&page_size=10" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "jobs": [ { "batch_id": "batch_email_find_20240729_abc789", "type": "email_find", "status": "completed", "created_at": "2024-07-29T11:15:00Z", "completed_at": "2024-07-29T11:45:00Z", "total_records": 5000 } // ... more jobs ], "pagination": { "page": 1, "page_size": 10, "total_results": 5, "total_pages": 1 } } }

📊 Analytics API

GET /external/analytics/usage/
Get detailed usage analytics for your API key, including request counts and credit consumption over a specified period. This is a free endpoint.

Query Parameters

Parameter Type Required Description
start_date string (YYYY-MM-DD) Optional Start date for the analytics period. Defaults to 30 days ago.
end_date string (YYYY-MM-DD) Optional End date for the analytics period. Defaults to today.
# Get usage for the last 30 days (default) curl -X GET "https://skwipe.com/api/v1/external/analytics/usage/" \ -H "Authorization: Bearer YOUR_API_KEY" # Get usage for a specific date range (e.g., May 2024) curl -X GET "https://skwipe.com/api/v1/external/analytics/usage/?start_date=2024-05-01&end_date=2024-05-31" \ -H "Authorization: Bearer YOUR_API_KEY"
{ "status": "success", "data": { "period": { "start": "2024-05-01", "end": "2024-05-31" }, "total_requests": 1250, "successful_requests": 1198, "failed_requests": 52, "success_rate": 95.84, "credits_consumed": { "search": 850, "email": 320, "contact": 80, "none": 0 // For free endpoints }, "daily_usage": [ { "day": "2024-05-01", "requests": 45, "credits": 38 }, { "day": "2024-05-02", "requests": 52, "credits": 45 } // ... more daily data ], "top_endpoints": [ { "endpoint": "companies", "requests": 680 }, { "endpoint": "email_find", "requests": 320 }, { "endpoint": "skwipe_enrich", "requests": 150 } // ... more top endpoints ] } }

⚠️ Common Error Responses

The API uses standard HTTP status codes to indicate the success or failure of a request. Error responses are returned in JSON format.

Common HTTP Status Codes

200 OK
- Request successful.
201 Created
- Resource successfully created (e.g., after a POST).
400 Bad Request
- The request was malformed or contained invalid parameters.
401 Unauthorized
- Authentication failed. API key is missing, invalid, or expired.
402 Payment Required
- Insufficient credits for the requested operation.
403 Forbidden
- You do not have permission to access this resource, or the API key is suspended/flagged.
404 Not Found
- The requested resource could not be found.
429 Too Many Requests
- Rate limit exceeded.
500 Internal Server Error
- An unexpected error occurred on the server.
502 Bad Gateway
- Error communicating with an upstream service.
{ "success": false, "error": { "code": 400, "message": "Invalid request data. Please check your input.", "type": "ValidationError", "details": { "linkedin_url": ["Enter a valid URL."], "non_field_errors": ["Missing required identifier for enrichment."] } }, "timestamp": "2024-07-29T12:00:00Z", "path": "/api/v1/external/skwipe/enrich-profile/" }
{ "success": false, "error": { "code": 401, "message": "Authentication required or invalid API key.", "type": "AuthenticationFailed", "details": { "detail": "Invalid API key" // or "API key has expired" or "API key is suspended" } }, "timestamp": "2024-07-29T12:01:00Z", "path": "/api/v1/external/companies/", "help": { "documentation": "/api/docs/", "support": "support@skwipe.com" } }
{ "success": false, "error": { "code": 402, "message": "Insufficient credits. Please purchase more credits to continue.", "type": "InsufficientCreditsError", "details": { "credit_type": "contact", "required": 1, "available": 0 } }, "timestamp": "2024-07-29T12:02:00Z", "path": "/api/v1/external/skwipe/enrich-profile/", "billing_url": "/api/v1/billing/purchase-credits/" }
{ "success": false, "error": { "code": 429, "message": "Rate limit exceeded. Please slow down your requests.", "type": "Throttled", "details": { "detail": "Request was throttled. Expected available in 35 seconds." }, "retry_after": 35 // Seconds }, "timestamp": "2024-07-29T12:03:00Z", "path": "/api/v1/external/jobs/" }

🚦 Rate Limiting & Best Practices

📈 Rate Limits by Plan

Rate limits are applied per API key and vary by plan. Default limits for the 'Pro' plan are typically around:

  • Per Minute: 1,000 requests
  • Per Hour: 10,000 requests
  • Per Day: 100,000 requests

Specific endpoints might have stricter limits (e.g., contact enrichment). Refer to the X-RateLimit-* headers in API responses or the Rate Limit Info utility endpoint.

Rate Limit Headers: All API responses include the following headers to help you manage your request rate:
X-RateLimit-Limit: 1000 // Max requests for current window (e.g., per minute) X-RateLimit-Remaining: 955 // Remaining requests in current window X-RateLimit-Reset: 1722256200 // Unix timestamp when the limit resets Retry-After: 25 // Seconds to wait before retrying (present on 429 errors) // Credit information might also be present in headers: X-Credits-Search-Remaining: 839 X-Credits-Email-Remaining: 422 X-Credits-Contact-Remaining: 196
Our API employs dynamic and adaptive rate limiting. This means limits can adjust based on overall system load and individual key behavior. Abusive patterns (e.g., rapid pagination, excessive errors) might lead to temporarily stricter limits for your key.

⚠️ Best Practices for API Usage

  • Implement Exponential Backoff: When you receive a 429 Too Many Requests error, wait for the duration specified in the Retry-After header (or a default) and then retry. Increase the wait time exponentially for subsequent failures.
  • Cache Responses: Cache frequently requested data on your end to reduce redundant API calls, especially for data that doesn't change often.
  • Use Pagination Efficiently: Request only the number of records you need per page using page_size. Avoid excessively deep pagination if possible.
  • Monitor Credit Usage: Regularly check your credit balance via the Key Info endpoint or Billing API to prevent service interruptions.
  • Validate Data Locally: Before making API calls, validate input data on your side to reduce errors and wasted credits on invalid requests.
  • Handle Errors Gracefully: Your application should be robust enough to handle various API error responses, including network issues.
  • Secure Your API Key: Treat your API key like a password. Do not embed it directly in client-side code or commit it to public repositories.

🛠️ SDK & Integration Examples

While official SDKs are not yet available, here are some basic examples of how to integrate with the Skwipe Data API in popular languages.

// Placeholder for alignment Client Integration Examples
import requests import json class SkwipeAPIClient: def __init__(self, api_key): self.api_key = api_key self.base_url = "https://skwipe.com/api/v1" self.headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", "Accept": "application/json" } def _request(self, method, endpoint, params=None, data=None): url = f"{self.base_url}{endpoint}" try: response = requests.request(method, url, headers=self.headers, params=params, json=data, timeout=30) response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) return response.json() except requests.exceptions.HTTPError as e: print(f"HTTP Error: {e.response.status_code} - {e.response.text}") return e.response.json() if e.response.content else {"error": str(e)} except requests.exceptions.RequestException as e: print(f"Request Exception: {e}") return {"error": str(e)} def search_companies(self, search_query, city=None, page=1, page_size=20): params = {"search": search_query, "page": page, "page_size": page_size} if city: params["city"] = city return self._request("GET", "/external/companies/", params=params) def enrich_profile_by_linkedin(self, linkedin_url): data = {"linkedin_url": linkedin_url} return self._request("POST", "/external/skwipe/enrich-profile/", data=data) def get_key_info(self): return self._request("GET", "/key-info/") # Usage example: # client = SkwipeAPIClient("YOUR_API_KEY") # companies = client.search_companies("technology", city="London") # print(json.dumps(companies, indent=2)) # profile_info = client.enrich_profile_by_linkedin("https://www.linkedin.com/in/example") # print(json.dumps(profile_info, indent=2)) # key_details = client.get_key_info() # print(json.dumps(key_details, indent=2))
const fetch = require('node-fetch'); // Or use axios or native fetch in browser/modern Node class SkwipeAPIClient { constructor(apiKey) { this.apiKey = apiKey; this.baseUrl = 'https://skwipe.com/api/v1'; this.headers = { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'Accept': 'application/json' }; } async _request(method, endpoint, params = null, body = null) { let url = `${this.baseUrl}${endpoint}`; if (params) { url += `?${new URLSearchParams(params)}`; } try { const response = await fetch(url, { method: method, headers: this.headers, body: body ? JSON.stringify(body) : null, timeout: 30000 }); const responseData = await response.json(); if (!response.ok) { console.error(`API Error: ${response.status} - ${JSON.stringify(responseData)}`); } return responseData; } catch (error) { console.error(`Request Exception: ${error}`); return { error: error.message }; } } async searchCompanies(searchQuery, city = null, page = 1, pageSize = 20) { const params = { search: searchQuery, page, page_size: pageSize }; if (city) params.city = city; return this._request('GET', '/external/companies/', params); } async enrichProfileByLinkedin(linkedinUrl) { const body = { linkedin_url: linkedinUrl }; return this._request('POST', '/external/skwipe/enrich-profile/', null, body); } async getKeyInfo() { return this._request('GET', '/key-info/'); } } // Usage example: // (async () => { // const client = new SkwipeAPIClient('YOUR_API_KEY'); // const companies = await client.searchCompanies('software', { city: 'New York' }); // console.log(JSON.stringify(companies, null, 2)); // const profileInfo = await client.enrichProfileByLinkedin('https://www.linkedin.com/in/example'); // console.log(JSON.stringify(profileInfo, null, 2)); // })();
<?php class SkwipeAPIClient { private $apiKey; private $baseUrl = 'https://skwipe.com/api/v1'; public function __construct($apiKey) { $this->apiKey = $apiKey; } private function _request($method, $endpoint, $params = null, $data = null) { $url = $this->baseUrl . $endpoint; if ($params) { $url .= '?' . http_build_query($params); } $headers = [ 'Authorization: Bearer ' . $this->apiKey, 'Content-Type: application/json', 'Accept: application/json' ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_TIMEOUT, 30); if ($method === 'POST') { curl_setopt($ch, CURLOPT_POST, true); if ($data) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); } } elseif ($method !== 'GET') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); } $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (curl_errno($ch)) { $error_msg = curl_error($ch); curl_close($ch); error_log("cURL Error: " . $error_msg); return ['error' => $error_msg]; } curl_close($ch); $decodedResponse = json_decode($response, true); if ($httpCode >= 400) { error_log("API Error: " . $httpCode . " - " . $response); } return $decodedResponse; } public function searchCompanies($searchQuery, $city = null, $page = 1, $pageSize = 20) { $params = ['search' => $searchQuery, 'page' => $page, 'page_size' => $pageSize]; if ($city) $params['city'] = $city; return $this->_request('GET', '/external/companies/', $params); } public function enrichProfileByLinkedin($linkedinUrl) { $data = ['linkedin_url' => $linkedinUrl]; return $this->_request('POST', '/external/skwipe/enrich-profile/', null, $data); } public function getKeyInfo() { return $this->_request('GET', '/key-info/'); } } // Usage example: // $client = new SkwipeAPIClient('YOUR_API_KEY'); // $companies = $client->searchCompanies('consulting', ['city' => 'Berlin']); // echo json_encode($companies, JSON_PRETTY_PRINT); // $profileInfo = $client->enrichProfileByLinkedin('https://www.linkedin.com/in/example'); // echo json_encode($profileInfo, JSON_PRETTY_PRINT); ?>

📞 Support & Contact

💬 Need Help?

If you have any questions, encounter issues, or need assistance with your integration, please don't hesitate to reach out to our support team.

Email: support@skwipe.com
Documentation: You are currently viewing it! For the latest version, visit docs.skwipe.com/api/v1/
API Status Page: Check real-time service status at status.skwipe.com (requires API key).

Support Response Times:

Our team strives to respond to all inquiries promptly. Typical response times vary by your API plan:

  • Basic Plan: Within 24-48 business hours.
  • Professional Plan: Within 12-24 business hours.
  • Enterprise Plan: Within 4-8 business hours (includes priority support channels).

For urgent issues, please indicate the urgency in your communication.