Complete API Reference
All 156 endpoints across 25 sections
Table of Contents
Authentication
User authentication and session management
1 endpoint/api/auth/signupSign Up
Register a new user account
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| string | Required | User email address | |
| password | string | Required | Password (minimum 8 characters) |
| name | string | Optional | User display name |
| termsAccepted | boolean | Required | Must be true to accept terms |
| privacyAccepted | boolean | Required | Must be true to accept privacy policy |
| marketingConsent | boolean | Optional | Opt-in to marketing emails |
Example Request
curl -X POST "https://api.scrappy.gg/api/auth/signup" \-H "Content-Type: application/json" \-d '{"email": "user@example.com","password": "your-password","termsAccepted": true,"privacyAccepted": true}'
Responses
{"success": true,"data": {"user": {"id": "abc123","email": "user@example.com"}}}
{"success": false,"error": {"code": "VALIDATION_ERROR","message": "Invalid email format"}}
{"success": false,"error": {"code": "RATE_LIMIT_EXCEEDED","message": "Too many attempts"}}
Users
User profile and account management
2 endpoints/api/usersGet Current User
Get the authenticated user's profile and statistics
Example Request
curl -X GET "https://api.scrappy.gg/api/users" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"user": {"id": "abc123","email": "user@example.com","name": "John Doe","createdAt": "2024-01-01T00:00:00Z"},"stats": {"sources": 10,"jobs": 25,"leads": 500}}}
{"success": false,"error": {"code": "UNAUTHORIZED","message": "Authentication required"}}
/api/users/passwordChange Password
Update the authenticated user's password
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| currentPassword | string | Required | Current password for verification |
| newPassword | string | Required | New password (minimum 8 characters) |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/users/password" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"currentPassword": "your-password","newPassword": "your-password"}'
Responses
{"success": true}
{"success": false,"error": {"code": "INVALID_PASSWORD","message": "Current password is incorrect"}}
Consent Management
GDPR consent preferences and history
3 endpoints/api/users/consentGet Consent Status
Get current consent preferences for the authenticated user
Example Request
curl -X GET "https://api.scrappy.gg/api/users/consent" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"termsAccepted": true,"termsAcceptedAt": "2024-01-01T00:00:00Z","privacyAccepted": true,"privacyAcceptedAt": "2024-01-01T00:00:00Z","marketingConsent": false}}
/api/users/consentUpdate Consent
Update consent preferences (currently supports marketing consent)
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| marketingConsent | boolean | Required | Whether to receive marketing emails |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/users/consent" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"marketingConsent": true}'
Responses
{"success": true,"data": {"marketingConsent": true,"updatedAt": "2024-01-01T00:00:00Z"}}
/api/users/consent/historyGet Consent History
Get audit trail of consent changes
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | Optional | Number of records to returnDefault: 50 |
| offset | number | Optional | Number of records to skipDefault: 0 |
Example Request
curl -X GET "https://api.scrappy.gg/api/users/consent/history" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"history": [{"id": "abc123","action": "CONSENT_UPDATED","details": {"marketingConsent": true},"createdAt": "2024-01-01T00:00:00Z"}],"pagination": {"total": 1,"limit": 50,"offset": 0}}}
Data Export
GDPR subject access requests - export your data
3 endpoints/api/users/exportRequest Data Export
Request an export of all your data (JSON or CSV format)
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| format | string | Optional | Export formatOptions: JSON, CSVDefault: JSON |
Example Request
curl -X POST "https://api.scrappy.gg/api/users/export" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"requestId": "abc123","status": "PENDING","downloadExpiry": "2024-01-08T00:00:00Z"}}
{"success": false,"error": {"code": "RATE_LIMIT_EXCEEDED","message": "Maximum 3 exports per week"}}
/api/users/export/statusGet Export Status
Check the status of all export requests
Example Request
curl -X GET "https://api.scrappy.gg/api/users/export/status" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"exports": [{"requestId": "abc123","status": "COMPLETED","format": "JSON","createdAt": "2024-01-01T00:00:00Z","downloadExpiry": "2024-01-08T00:00:00Z"}]}}
/api/users/export/downloadDownload Export
Download a completed data export (7-day download window)
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| requestId | string | Required | The export request ID |
Example Request
curl -X GET ?requestId=abc123"https://api.scrappy.gg/api/users/export/download" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"note": "Returns file attachment"}
{"success": false,"error": {"code": "NOT_FOUND","message": "Export not found or expired"}}
Account Deletion
GDPR right to erasure - delete your account
4 endpoints/api/users/deletionRequest Account Deletion
Request deletion of your account. A confirmation email will be sent.
Example Request
curl -X POST "https://api.scrappy.gg/api/users/deletion" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"expiresAt": "2024-01-02T00:00:00Z"}}
{"success": false,"error": {"code": "RATE_LIMIT_EXCEEDED","message": "One deletion request per day"}}
/api/users/deletion/confirmConfirm Account Deletion
Confirm account deletion using the token from email. Starts 30-day grace period.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | Required | Confirmation token from email (24-hour expiry) |
Example Request
curl -X POST "https://api.scrappy.gg/api/users/deletion/confirm" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"token": "string"}'
Responses
{"success": true,"data": {"scheduledAt": "2024-01-31T00:00:00Z","gracePeriodDays": 30}}
{"success": false,"error": {"code": "INVALID_TOKEN","message": "Token is invalid or expired"}}
/api/users/deletion/cancelCancel Account Deletion
Cancel a pending account deletion during the grace period
Example Request
curl -X POST "https://api.scrappy.gg/api/users/deletion/cancel" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"message": "Account deletion cancelled"}
{"success": false,"error": {"code": "NO_PENDING_DELETION","message": "No deletion request to cancel"}}
/api/users/deletion/statusGet Deletion Status
Check the status of any pending account deletion
Example Request
curl -X GET "https://api.scrappy.gg/api/users/deletion/status" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"status": "scheduled","scheduledAt": "2024-01-31T00:00:00Z","gracePeriodDays": 30}}
Projects
Organize sources and leads into projects
5 endpoints/api/projectsList Projects
Get all projects for the authenticated user
Example Request
curl -X GET "https://api.scrappy.gg/api/projects" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"projects": [{"id": "abc123","name": "My Project","description": "Project description","color": "#3b82f6","createdAt": "2024-01-01T00:00:00Z"}]}}
/api/projectsCreate Project
Create a new project
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Project name |
| description | string | Optional | Project description |
| color | string | Optional | Hex color code (e.g., #3b82f6) |
Example Request
curl -X POST "https://api.scrappy.gg/api/projects" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name"}'
Responses
{"success": true,"data": {"project": {"id": "abc123","name": "My Project"}}}
/api/projects/[id]Get Project
Get a specific project by ID
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Project ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/projects/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"project": {"id": "abc123","name": "My Project"}}}
{"success": false,"error": {"code": "NOT_FOUND","message": "Project not found"}}
/api/projects/[id]Update Project
Update a project's details
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Project ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Project name |
| description | string | Optional | Project description |
| color | string | Optional | Hex color code |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/projects/abc123" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"project": {"id": "abc123","name": "Updated Project"}}}
{"success": false,"error": {"code": "FORBIDDEN","message": "Not authorized to update this project"}}
/api/projects/[id]Delete Project
Delete a project and all associated data
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Project ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/projects/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
{"success": false,"error": {"code": "FORBIDDEN","message": "Not authorized to delete this project"}}
Sources
Manage data sources for lead scraping
10 endpoints/api/sourcesList Sources
Get all sources with optional filtering
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | Optional | Filter by statusOptions: DRAFT, ACTIVE, ARCHIVED |
| projectId | string | Optional | Filter by project ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/sources" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"sources": [{"id": "abc123","name": "Example Source","url": "https://example.com","scrapeType": "STATIC","status": "ACTIVE"}]}}
/api/sourcesCreate Source
Create a new source for lead scraping
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Source name |
| url | string | Required | URL to scrape |
| scrapeType | string | Required | Type of scrapingOptions: STATIC, DYNAMIC, API |
| selectors | object | Required | CSS/XPath selectors for data extraction |
| description | string | Optional | Source description |
| scheduleType | string | Optional | Scraping scheduleOptions: MANUAL, HOURLY, DAILY, WEEKLY |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","url": "https://example.com","scrapeType": "string","selectors": {}}'
Responses
{"success": true,"data": {"source": {"id": "abc123","name": "Example Source","status": "DRAFT"}}}
/api/sources/[id]Get Source
Get a specific source by ID
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Source ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/sources/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"source": {"id": "abc123","name": "Example Source"}}}
/api/sources/[id]Update Source
Update a source's configuration
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Source ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Source name |
| url | string | Optional | URL to scrape |
| selectors | object | Optional | CSS/XPath selectors |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/sources/abc123" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"source": {"id": "abc123","name": "Updated Source"}}}
/api/sources/[id]Delete Source
Delete a source
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Source ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/sources/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/sources/[id]/activateActivate Source
Activate a draft source to enable scraping
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Source ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources/abc123/activate" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"source": {"id": "abc123","status": "ACTIVE"}}}
{"success": false,"error": {"code": "ALREADY_ACTIVE","message": "Source is already active"}}
/api/sources/discoverDiscover Sources (AI)
Use AI to discover relevant sources based on a search query
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | Required | Search query (minimum 3 characters) |
| count | number | Optional | Number of sources to discover (1-10)Default: 5 |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources/discover" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"query": "search term"}'
Responses
{"success": true,"data": {"sources": [{"name": "Example Directory","url": "https://example.com/directory","category": "Business Directory","estimatedLeads": 500,"scrapeType": "STATIC","description": "A directory of local businesses","reasoning": "This directory contains relevant business listings"}]}}
/api/sources/generateGenerate Sources (AI)
Use AI to generate source suggestions based on a project description
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| projectDescription | string | Required | Project description (minimum 10 characters) |
| targetAudience | string | Optional | Target audience for the leads |
| industry | string | Optional | Industry to focus on |
| location | string | Optional | Geographic location |
| count | number | Optional | Number of sources to generate (1-5)Default: 3 |
| autoSave | boolean | Optional | Automatically save generated sources to the projectDefault: false |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources/generate" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"projectDescription": "string"}'
Responses
{"success": true,"data": {"sources": [{"name": "Industry Directory","url": "https://example.com/directory","description": "Relevant directory for target industry","scrapeType": "STATIC","reasoning": "Matches project requirements"}]}}
{"success": false,"error": {"code": "VALIDATION_ERROR","message": "Project description must be at least 10 characters"}}
/api/sources/batchBatch Create Sources
Create multiple sources at once from AI suggestions or manual input
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| sources | array | Required | Array of source objects to create (1 or more) |
| sources[].name | string | Required | Source name |
| sources[].url | string | Required | URL to scrape |
| sources[].description | string | Optional | Source description |
| sources[].scrapeType | string | Optional | Type of scrapingOptions: STATIC, DYNAMIC, APIDefault: DYNAMIC |
| sources[].selectors | object | Optional | CSS/XPath selectors for data extraction |
| sources[].reasoning | string | Optional | AI reasoning for why this source was suggested |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources/batch" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"sources": [],"sources[].name": "Example Name","sources[].url": "https://example.com"}'
Responses
{"success": true,"data": {"sources": [{"id": "abc123","name": "Example Source","status": "DRAFT"}],"count": 1}}
{"success": false,"error": {"code": "VALIDATION_ERROR","message": "At least one source is required"}}
/api/sources/analyzeAnalyze Source
Analyze project requirements from a URL or PDF file
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| file | file | Optional | PDF file to analyze (mutually exclusive with url) |
| url | string | Optional | URL to analyze (mutually exclusive with file) |
Example Request
curl -X POST "https://api.scrappy.gg/api/sources/analyze" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: multipart/form-data"
Responses
{"success": true,"data": {"requirements": {"targetAudience": "Small businesses","industry": "Technology","location": "United States","suggestedSources": []}}}
{"success": false,"error": {"code": "VALIDATION_ERROR","message": "Either file or url is required"}}
Jobs
Scraping job management and monitoring
5 endpoints/api/jobsList Jobs
Get all scraping jobs
Example Request
curl -X GET "https://api.scrappy.gg/api/jobs" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"jobs": [{"id": "abc123","name": "Scrape Job","status": "COMPLETED","progress": 100,"leadsFound": 150,"createdAt": "2024-01-01T00:00:00Z"}]}}
/api/jobsCreate Job
Create and enqueue a new scraping job
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Job name |
| sourceId | string | Required | Source ID to scrape |
Example Request
curl -X POST "https://api.scrappy.gg/api/jobs" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","sourceId": "abc123"}'
Responses
{"success": true,"data": {"job": {"id": "abc123","name": "Scrape Job","status": "PENDING"}}}
/api/jobs/[id]Get Job
Get job details and progress
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Job ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/jobs/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"job": {"id": "abc123","status": "RUNNING","progress": 45,"leadsFound": 67}}}
/api/jobs/[id]Cancel/Delete Job
Cancel a running job or delete a completed job
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Job ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/jobs/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/jobs/[id]/retryRetry Job
Retry a failed job
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Job ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/jobs/abc123/retry" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"message": "Job retry started"}
{"success": false,"error": {"code": "INVALID_STATUS","message": "Only failed jobs can be retried"}}
Leads
Lead management and email validation
9 endpoints/api/leadsList Leads
Get all leads with optional filtering
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | Optional | Filter by status |
| company | string | Optional | Filter by company name |
| jobId | string | Optional | Filter by job ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/leads" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"leads": [{"id": "abc123","firstName": "John","lastName": "Doe","email": "john@example.com","company": "Example Inc","status": "VALID"}]}}
/api/leadsCreate Lead
Create a lead manually
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| sourceUrl | string | Required | Source URL where lead was found |
| firstName | string | Optional | First name |
| lastName | string | Optional | Last name |
| string | Optional | Email address | |
| phone | string | Optional | Phone number |
| company | string | Optional | Company name |
| jobTitle | string | Optional | Job title |
Example Request
curl -X POST "https://api.scrappy.gg/api/leads" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"sourceUrl": "https://example.com"}'
Responses
{"success": true,"data": {"lead": {"id": "abc123","firstName": "John","lastName": "Doe"}}}
/api/leads/[id]Get Lead
Get lead details with job and source info
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Lead ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/leads/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"lead": {"id": "abc123","email": "john@example.com"}}}
/api/leads/[id]Update Lead
Update a lead's information
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Lead ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| firstName | string | Optional | First name |
| lastName | string | Optional | Last name |
| string | Optional | Email address | |
| status | string | Optional | Lead status |
| tags | array | Optional | Tags for categorization |
| notes | string | Optional | Notes about the lead |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/leads/abc123" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"lead": {"id": "abc123"}}}
/api/leads/[id]Delete Lead
Delete a lead
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Lead ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/leads/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/leads/[id]/validate-emailValidate Lead Email
Trigger email validation for a specific lead
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Lead ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/leads/abc123/validate-email" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"status": "VALID","tier": "TIER_1","errors": [],"flags": []}}
{"success": false,"error": {"code": "NO_EMAIL","message": "Lead has no email to validate"}}
/api/leads/bulkBulk Delete Leads
Delete multiple leads at once (max 1000)
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Array of lead IDs to delete (1-1000) |
Example Request
curl -X POST "https://api.scrappy.gg/api/leads/bulk" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": []}'
Responses
{"success": true,"data": {"deleted": 50,"failed": 0,"errors": []}}
/api/leads/bulkBulk Update Leads
Update multiple leads at once
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Array of lead IDs to update |
| updates | object | Required | Updates to apply (status, tags add/remove) |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/leads/bulk" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": [],"updates": {}}'
Responses
{"success": true,"data": {"updated": 50,"failed": 0}}
/api/leads/validate-bulkBulk Validate Emails
Queue email validation for multiple leads (max 1000)
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Array of lead IDs to validate (1-1000) |
Example Request
curl -X POST "https://api.scrappy.gg/api/leads/validate-bulk" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": []}'
Responses
{"success": true,"data": {"totalRequested": 100,"totalQueued": 95,"skipped": [{"id": "abc","reason": "No email"}]}}
Profile Types & Profiles
Custom entity schemas for structured data extraction, plus management of extracted profiles
11 endpoints/api/profile-typesList Profile Types
Get all profile type schemas defined by the user.
Example Request
curl -X GET "https://api.scrappy.gg/api/profile-types" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"profileTypes": [{"id": "pt_123","name": "Private Lender","slug": "private-lender","fields": [],"createdAt": "2024-01-01T00:00:00Z"}]}}
/api/profile-typesCreate Profile Type
Define a new custom entity schema for structured data extraction.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Profile type name |
| slug | string | Required | URL-safe identifier |
| description | string | Optional | Schema description |
| fields | array | Required | JSON Schema field definitions |
Example Request
curl -X POST "https://api.scrappy.gg/api/profile-types" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","slug": "string","fields": []}'
Responses
{"success": true,"data": {"id": "pt_123","name": "Private Lender"}}
/api/profile-types/{id}Get Profile Type
Get a profile type by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Profile type ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/profile-types/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {}}
/api/profile-types/{id}Update Profile Type
Update a profile type's fields or metadata.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Profile type ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Profile type name |
| fields | array | Optional | Updated field definitions |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/profile-types/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {}}
/api/profile-types/{id}Delete Profile Type
Delete a profile type schema.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Profile type ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/profile-types/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/profile-types/templatesList Built-in Templates
Get built-in profile type templates (e.g. Private Lender, Restaurant, SaaS Company).
Example Request
curl -X GET "https://api.scrappy.gg/api/profile-types/templates" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"templates": [{"slug": "private-lender","name": "Private Lender","description": "Real estate lender schema"},{"slug": "restaurant","name": "Restaurant","description": "Food & beverage schema"}]}}
/api/profilesList Profiles
Get extracted profiles with optional filtering.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| profileTypeId | string | Optional | Filter by profile type |
| status | string | Optional | Filter by statusOptions: NEW, VERIFIED, OUTDATED, ARCHIVED |
| page | number | Optional | Page number |
| limit | number | Optional | Items per page (max: 100) |
Example Request
curl -X GET "https://api.scrappy.gg/api/profiles" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"profiles": [{"id": "prof_123","profileTypeId": "pt_123","data": {},"status": "NEW"}],"total": 5}}
/api/profiles/{id}Get Profile
Get a single profile by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Profile ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/profiles/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {}}
/api/profiles/{id}Update Profile
Update profile data or status.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Profile ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| data | object | Optional | Profile field data |
| status | string | Optional | Profile statusOptions: NEW, VERIFIED, OUTDATED, ARCHIVED |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/profiles/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {}}
/api/profiles/exportExport Profiles
Export profiles as CSV. Optionally filter by matching rule (includes matchScore + aiReasoning columns).
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| profileTypeId | string | Optional | Filter by profile type |
| ruleId | string | Optional | Export profiles matching a specific matching rule |
Example Request
curl -X GET "https://api.scrappy.gg/api/profiles/export" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"Content-Type": "text/csv"}
/api/profiles/statsProfile Stats
Get aggregate statistics across all profiles.
Example Request
curl -X GET "https://api.scrappy.gg/api/profiles/stats" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"total": 150,"byStatus": {"NEW": 80,"VERIFIED": 50,"OUTDATED": 15,"ARCHIVED": 5},"byProfileType": [{"profileTypeId": "pt_123","count": 90}]}}
Matching Engine
Rules-based and AI-powered filtering and scoring of profiles — FILTER, SCORED, and AI match types
8 endpoints/api/matching/rulesList Matching Rules
Get all matching rules for the current user.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| profileTypeId | string | Optional | Filter by profile type |
Example Request
curl -X GET "https://api.scrappy.gg/api/matching/rules" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"rules": [{"id": "rule_123","name": "High-value Leads","type": "SCORED","profileTypeId": "pt_123"}]}}
/api/matching/rulesCreate Matching Rule
Create a new matching rule. Three types are supported: FILTER (boolean pass/fail), SCORED (weighted 0–100 score), and AI (LLM-powered evaluation using aiPrompt).
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Rule name |
| type | string | Required | Match typeOptions: FILTER, SCORED, AI |
| profileTypeId | string | Required | Profile type this rule applies to |
| criteria | object | Optional | Matching criteria (field conditions and weights). Can be empty {} for AI type. |
| aiPrompt | string | Optional | LLM prompt template for AI type rules. Use {{profile}} and {{profileType}} placeholders. |
| minimumScore | number | Optional | Minimum score threshold for SCORED type (0–100) |
Example Request
curl -X POST "https://api.scrappy.gg/api/matching/rules" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","type": "string","profileTypeId": "abc123"}'
Responses
{"success": true,"data": {"id": "rule_123","name": "High-value Leads"}}
/api/matching/rules/{id}Get Matching Rule
Get a matching rule by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Rule ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/matching/rules/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {}}
/api/matching/rules/{id}Update Matching Rule
Update a matching rule's criteria or metadata.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Rule ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Rule name |
| criteria | object | Optional | Updated criteria |
| aiPrompt | string | Optional | Updated AI prompt |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/matching/rules/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {}}
/api/matching/rules/{id}Delete Matching Rule
Delete a matching rule.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Rule ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/matching/rules/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/matching/previewPreview Matching
Test a matching rule against sample profiles before saving.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| ruleId | string | Optional | Existing rule to preview |
| type | string | Optional | Rule type for inline previewOptions: FILTER, SCORED, AI |
| criteria | object | Optional | Inline criteria to test |
| aiPrompt | string | Optional | Inline AI prompt to test |
| profileTypeId | string | Optional | Profile type to test against |
| sampleSize | number | Optional | Number of sample profiles (default: 10) |
Example Request
curl -X POST "https://api.scrappy.gg/api/matching/preview" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"matched": 7,"notMatched": 3,"results": [{"profileId": "prof_123","matched": true,"score": 87,"reasoning": "Revenue > $1M"}]}}
/api/matching/executeExecute Matching Rule
Run a matching rule against all profiles and store results.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| ruleId | string | Required | Rule ID to execute |
Example Request
curl -X POST "https://api.scrappy.gg/api/matching/execute" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"ruleId": "abc123"}'
Responses
{"success": true,"data": {"matched": 42,"notMatched": 18,"executionTimeMs": 1250}}
/api/matching/resultsList Matching Results
Get stored matching results for a rule.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| ruleId | string | Required | Rule ID |
| matched | boolean | Optional | Filter matched/unmatched |
| page | number | Optional | Page number |
| limit | number | Optional | Items per page |
Example Request
curl -X GET ?ruleId=abc123"https://api.scrappy.gg/api/matching/results" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"results": [{"profileId": "prof_123","matched": true,"score": 87,"matchedAt": "2024-01-15"}],"total": 42}}
Accounts
Aggregated company/account view derived from lead data
4 endpoints/api/accountsList Accounts
Returns companies aggregated from lead data with enriched metadata. Accounts are computed dynamically — not stored as a separate entity.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| search | string | Optional | Search by company name or domain |
| projectId | string | Optional | Filter by project ID |
| page | number | Optional | Page number (default: 1) |
| limit | number | Optional | Items per page (default: 20, max: 100) |
Example Request
curl -X GET "https://api.scrappy.gg/api/accounts" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"accounts": [{"id": "acme.com","companyDomain": "acme.com","companyName": "Acme Corp","leadCount": 12,"latestLeadAt": "2024-01-15T10:30:00Z","emailsFound": 10,"linkedinUrl": "https://linkedin.com/company/acme"}],"total": 42,"page": 1,"limit": 20}}
/api/accounts/{accountId}Get Account
Get a single account with all associated leads.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| accountId | string | Required | Company domain used as account identifier |
Example Request
curl -X GET "https://api.scrappy.gg/api/accounts/{accountId}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"id": "acme.com","companyDomain": "acme.com","companyName": "Acme Corp","leadCount": 12,"leads": []}}
/api/accounts/{accountId}Update Account
Update account metadata (e.g. notes, tags).
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| accountId | string | Required | Company domain used as account identifier |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| notes | string | Optional | Notes about this account |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/accounts/{accountId}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"id": "acme.com"}}
/api/accounts/{accountId}/commonalitiesAnalyze LinkedIn Commonalities
Use AI (Perplexity) to analyze shared traits among leads at this account. Requires PERPLEXITY_API_KEY.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| accountId | string | Required | Company domain |
Example Request
curl -X GET "https://api.scrappy.gg/api/accounts/{accountId}/commonalities" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"commonalities": ["Alumni of MIT","Previously worked at Google","Focus on B2B SaaS"],"analyzedProfiles": 8}}
{"success": false,"error": {"code": "SERVICE_UNAVAILABLE","message": "AI service not configured"}}
Deal Campaigns
AI-powered deal flow management — discover sources, rank accounts, and generate matching rules
8 endpoints/api/campaignsList Campaigns
Get all deal campaigns for the current user.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | Optional | Filter by statusOptions: ACTIVE, PAUSED, COMPLETED, ARCHIVED |
| projectId | string | Optional | Filter by project ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/campaigns" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"campaigns": [{"id": "camp_123","name": "Q1 Outreach","status": "ACTIVE"}]}}
/api/campaignsCreate Campaign
Create a new deal campaign.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Campaign name |
| description | string | Optional | Campaign description |
| targetIndustry | string | Optional | Target industry vertical |
| targetGeography | string | Optional | Target geography (e.g. 'US', 'New York') |
| targetCompanySize | string | Optional | Target company size (e.g. '50-200 employees') |
| dealParams | object | Optional | Custom deal parameters (loan size, revenue threshold, etc.) |
| projectId | string | Optional | Associate with a project |
Example Request
curl -X POST "https://api.scrappy.gg/api/campaigns" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name"}'
Responses
{"success": true,"data": {"id": "camp_123","name": "Q1 Outreach","status": "ACTIVE"}}
/api/campaigns/{id}Get Campaign
Get a single campaign by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/campaigns/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"id": "camp_123"}}
/api/campaigns/{id}Update Campaign
Update campaign fields.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Campaign name |
| status | string | Optional | Campaign statusOptions: ACTIVE, PAUSED, COMPLETED, ARCHIVED |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/campaigns/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"id": "camp_123"}}
/api/campaigns/{id}Delete Campaign
Permanently delete a campaign.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/campaigns/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/campaigns/{id}/discover-sourcesDiscover Sources for Campaign
Use AI to find relevant data sources based on the campaign's target parameters. Requires PERPLEXITY_API_KEY.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/campaigns/{id}/discover-sources" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"sources": [{"name": "NYC Construction Directory","url": "https://example.com","reasoning": "High density of target companies"}]}}
/api/campaigns/{id}/suggest-matchingSuggest Matching Rules
Generate AI-suggested matching rules based on campaign deal parameters.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/campaigns/{id}/suggest-matching" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"rules": [{"type": "FILTER","field": "jobTitle","operator": "contains","value": "CFO"}]}}
/api/campaigns/{id}/ranked-accountsRanked Accounts
Get accounts ranked by fit score for this campaign.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/campaigns/{id}/ranked-accounts" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"accounts": [{"companyDomain": "acme.com","companyName": "Acme Corp","score": 92,"leadCount": 8}]}}
AI Chat Agent
Conversational AI assistant (Claude) that can query and manage leads, sources, and jobs via natural language
5 endpoints/api/chat/conversationsList Conversations
Get all chat conversations for the current user.
Example Request
curl -X GET "https://api.scrappy.gg/api/chat/conversations" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"conversations": [{"id": "conv_123","title": "Lead search for NYC dentists","messageCount": 6,"createdAt": "2024-01-15T10:00:00Z","updatedAt": "2024-01-15T10:05:00Z"}]}}
/api/chat/conversationsCreate Conversation
Start a new chat conversation.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Optional | Conversation title (auto-generated if omitted) |
Example Request
curl -X POST "https://api.scrappy.gg/api/chat/conversations" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"id": "conv_123","title": "New Conversation","messages": []}}
/api/chat/conversations/{id}Get Conversation
Get a conversation with its full message history.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Conversation ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/chat/conversations/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"id": "conv_123","title": "Lead search","messages": [{"role": "user","content": "Find leads in healthcare","createdAt": "..."},{"role": "assistant","content": "I found 24 leads...","createdAt": "..."}]}}
/api/chat/conversations/{id}Delete Conversation
Delete a conversation and all its messages.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Conversation ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/chat/conversations/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/chat/conversations/{id}/messagesSend Message (Streaming)
Send a message to the AI agent and receive a streaming SSE response. The agent has 9 built-in tools: search leads, get lead, update lead, search sources, get source, search jobs, get job, create job, and get stats. Requires ANTHROPIC_API_KEY.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Conversation ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| message | string | Required | User message to send to the agent |
Example Request
curl -X POST "https://api.scrappy.gg/api/chat/conversations/{id}/messages" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"message": "string"}'
Responses
{"event: text": {"delta": "I found "},"event: tool_start": {"tool": "search_leads"},"event: tool_call": {"tool": "search_leads","input": {"query": "healthcare"}},"event: tool_result": {"tool": "search_leads","result": {"count": 24}},"event: done": {}}
{"success": false,"error": {"code": "SERVICE_UNAVAILABLE","message": "AI chat not configured"}}
Email Verification
Email bounce tracking and spam trap detection
3 endpoints/api/email-verification/bounceRecord Bounce
Record an email bounce event
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| string | Required | Email address that bounced | |
| bounceType | string | Required | Type of bounceOptions: HARD, SOFT, SPAM |
| bounceReason | string | Optional | Detailed bounce reason |
| smtpCode | string | Optional | SMTP error code |
Example Request
curl -X POST "https://api.scrappy.gg/api/email-verification/bounce" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"email": "user@example.com","bounceType": "string"}'
Responses
{"success": true}
/api/email-verification/spam-trapMark as Spam Trap
Mark an email as a known spam trap
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| string | Required | Email address | |
| confidence | number | Optional | Confidence level 0-100Default: 100 |
| trapType | string | Optional | Type of spam trap |
| source | string | Optional | Source of identification |
Example Request
curl -X POST "https://api.scrappy.gg/api/email-verification/spam-trap" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"email": "user@example.com"}'
Responses
{"success": true}
/api/email-verification/statsGet Verification Stats
Get email verification and bounce statistics
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| bounces | boolean | Optional | Include recent bounces |
| bounceLimit | number | Optional | Number of recent bouncesDefault: 100 |
Example Request
curl -X GET "https://api.scrappy.gg/api/email-verification/stats" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"verificationStats": {"total": 1000,"valid": 850,"invalid": 100,"unknown": 50},"bounceStats": {"hard": 50,"soft": 30,"spam": 20},"recentBounces": []}}
LinkedIn Integration
LinkedIn scraping, lead enrichment, profile validation, and commonalities analysis
7 endpoints/api/linkedin/credentialsList LinkedIn Credentials
Get stored LinkedIn credentials with computed status (ACTIVE, RATE_LIMITED, SOFT_BANNED, INVALID), daily limit, and requests remaining.
Example Request
curl -X GET "https://api.scrappy.gg/api/linkedin/credentials" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"credentials": [{"id": "cred_123","email": "linkedin@example.com","status": "ACTIVE","dailyLimit": 80,"requestsRemaining": 45}]}}
/api/linkedin/credentialsAdd LinkedIn Credentials
Store LinkedIn account credentials for scraping.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| string | Required | LinkedIn account email | |
| password | string | Required | LinkedIn account password (encrypted at rest) |
Example Request
curl -X POST "https://api.scrappy.gg/api/linkedin/credentials" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"email": "user@example.com","password": "your-password"}'
Responses
{"success": true,"data": {"id": "cred_123","email": "linkedin@example.com"}}
/api/linkedin/validateValidate LinkedIn Profile
Validate that a LinkedIn profile URL is reachable and extract basic metadata.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| profileUrl | string | Required | LinkedIn profile URL to validate |
Example Request
curl -X POST "https://api.scrappy.gg/api/linkedin/validate" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"profileUrl": "https://example.com"}'
Responses
{"success": true,"data": {"valid": true,"name": "John Doe","headline": "CEO at Acme Corp"}}
/api/linkedin/enrichEnrich Lead from LinkedIn
Enrich a lead's data by scraping their LinkedIn profile.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadId | string | Required | Lead ID to enrich |
| profileUrl | string | Optional | LinkedIn profile URL (uses lead.linkedin if omitted) |
Example Request
curl -X POST "https://api.scrappy.gg/api/linkedin/enrich" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadId": "abc123"}'
Responses
{"success": true,"data": {"leadId": "lead_123","enriched": {"jobTitle": "VP of Sales","company": "Acme Corp","location": "New York"}}}
/api/linkedin/jobsList LinkedIn Jobs
Get all LinkedIn scraping jobs.
Example Request
curl -X GET "https://api.scrappy.gg/api/linkedin/jobs" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"jobs": [{"id": "ljob_123","status": "COMPLETED","profilesScraped": 150}]}}
/api/linkedin/jobs/{id}Get LinkedIn Job
Get a LinkedIn scraping job by ID.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Job ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/linkedin/jobs/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {}}
/api/linkedin/commonalitiesBatch Commonalities Analysis
Analyze common traits across a batch of LinkedIn profiles using AI. Useful for identifying shared backgrounds, schools, companies, or interests. Requires PERPLEXITY_API_KEY.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| profileUrls | array | Required | Array of LinkedIn profile URLs to analyze |
| context | string | Optional | Additional context for the analysis |
Example Request
curl -X POST "https://api.scrappy.gg/api/linkedin/commonalities" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"profileUrls": []}'
Responses
{"success": true,"data": {"commonalities": ["All attended Ivy League universities","Previously worked in investment banking","Active in real estate investing communities"],"analyzedProfiles": 12,"confidence": 0.85}}
{"success": false,"error": {"code": "SERVICE_UNAVAILABLE","message": "AI service not configured"}}
Warmup Domains
Email domain warming system — 5-week progressive warmup for improved deliverability
7 endpoints/api/warmup-domainsList Warmup Domains
Get all warmup domains for the current user.
Example Request
curl -X GET "https://api.scrappy.gg/api/warmup-domains" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"warmupDomains": [{"id": "wd_123","domain": "outreach.acme.com","status": "WARMING","currentDailyVolume": 25,"targetDailyVolume": 100,"weekNumber": 2,"openRate": 0.42,"bounceRate": 0.02}]}}
/api/warmup-domainsCreate Warmup Domain
Register a new domain for warmup. The domain must have valid SPF and DKIM before warmup can start.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| domain | string | Required | Domain to warm up (e.g. outreach.acme.com) |
| targetDailyVolume | number | Optional | Target daily email volume after warmup (default: 100) |
Example Request
curl -X POST "https://api.scrappy.gg/api/warmup-domains" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"domain": "string"}'
Responses
{"success": true,"data": {"id": "wd_123","domain": "outreach.acme.com","status": "PENDING_DNS","spfValid": false,"dkimValid": false}}
/api/warmup-domains/{id}Get Warmup Domain
Get a warmup domain by ID with full metrics.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Warmup domain ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/warmup-domains/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"id": "wd_123","domain": "outreach.acme.com","status": "WARMING","spfValid": true,"dkimValid": true,"dmarcValid": true,"currentDailyVolume": 25,"openRate": 0.42,"replyRate": 0.08,"bounceRate": 0.02,"spamRate": 0.001}}
/api/warmup-domains/{id}Update Warmup Domain
Update warmup domain settings (e.g. pause/resume).
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Warmup domain ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | Optional | Override statusOptions: PAUSED, WARMING |
| targetDailyVolume | number | Optional | Updated target daily volume |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/warmup-domains/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {}}
/api/warmup-domains/{id}Delete Warmup Domain
Remove a warmup domain.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Warmup domain ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/warmup-domains/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/warmup-domains/{id}/startStart Warmup
Begin the 5-week progressive warmup schedule. Requires valid SPF and DKIM records. Warmup progresses: 5→10→25→50→100 emails/day. Auto-pauses if bounce rate >10% or spam rate >0.5%.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Warmup domain ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/warmup-domains/{id}/start" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"status": "WARMING","startedAt": "2024-01-15T10:00:00Z","estimatedCompletionWeeks": 5}}
{"success": false,"error": {"code": "DNS_NOT_CONFIGURED","message": "SPF and DKIM records are required before warmup can start"}}
/api/warmup-domains/{id}/metricsUpdate Warmup Metrics
Update sending metrics (open rate, reply rate, bounce rate, spam rate). Used to feed real delivery data back into the warmup monitor.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Warmup domain ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| openRate | number | Optional | Open rate (0–1) |
| replyRate | number | Optional | Reply rate (0–1) |
| bounceRate | number | Optional | Bounce rate (0–1). >0.10 triggers auto-pause. |
| spamRate | number | Optional | Spam rate (0–1). >0.005 triggers auto-pause. |
| emailsSent | number | Optional | Emails sent today |
Example Request
curl -X POST "https://api.scrappy.gg/api/warmup-domains/{id}/metrics" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"status": "WARMING","bounceRateAlert": false,"spamRateAlert": false}}
AngelSend Integration
Cold email outreach platform integration — export leads, send emails, AI personalization, and domain warmup
16 endpoints/api/angelsend/statusConnection Status
Check if AngelSend is connected and return account info.
Example Request
curl -X GET "https://api.scrappy.gg/api/angelsend/status" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"connected": true,"email": "user@example.com","plan": "pro"}}
/api/angelsend/creditsGet AngelSend Credits
Get the current AngelSend credit balance.
Example Request
curl -X GET "https://api.scrappy.gg/api/angelsend/credits" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"credits": 5000,"used": 1200}}
/api/angelsend/leads/exportExport Leads to AngelSend
Export selected leads to an AngelSend project for outreach.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Array of lead IDs to export |
| projectName | string | Optional | AngelSend project to export into |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/leads/export" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": []}'
Responses
{"success": true,"data": {"exported": 45,"failed": 2}}
/api/angelsend/send-emailSend Single Email
Send an individual email via AngelSend.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient email address |
| subject | string | Required | Email subject |
| body | string | Required | Email body (HTML or plain text) |
| leadId | string | Optional | Associated lead ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/send-email" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"to": "string","subject": "string","body": "string"}'
Responses
{"success": true,"data": {"messageId": "msg_123"}}
/api/angelsend/send-emailsSend Bulk Emails
Send emails to multiple leads in one request.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| emails | array | Required | Array of { to, subject, body, leadId } objects |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/send-emails" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"emails": []}'
Responses
{"success": true,"data": {"sent": 48,"failed": 2}}
/api/angelsend/generate-emailsGenerate Email Copy
Use AI to generate personalized email copy for leads.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Lead IDs to generate emails for |
| template | string | Optional | Email template or campaign context |
| tone | string | Optional | Email toneOptions: professional, casual, friendly |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/generate-emails" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": []}'
Responses
{"success": true,"data": {"emails": [{"leadId": "lead_123","subject": "Quick question about Acme","body": "Hi John, ..."}]}}
/api/angelsend/personalizePersonalize Email
AI-personalize an existing email template for a specific lead.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadId | string | Required | Lead ID |
| template | string | Required | Base email template |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/personalize" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadId": "abc123","template": "string"}'
Responses
{"success": true,"data": {"subject": "...","body": "..."}}
/api/angelsend/verify-emailsVerify Emails via AngelSend
Trigger email verification for leads through AngelSend.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Required | Lead IDs to verify |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/verify-emails" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadIds": []}'
Responses
{"success": true}
/api/angelsend/ai/analyze-intentAnalyze Reply Intent
Use AI to analyze the intent of a reply email (interested, not interested, objection, etc.).
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| emailBody | string | Required | Reply email body to analyze |
| leadId | string | Optional | Associated lead ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/ai/analyze-intent" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"emailBody": "user@example.com"}'
Responses
{"success": true,"data": {"intent": "INTERESTED","confidence": 0.92,"summary": "Lead expressed interest and asked for a call","suggestedAction": "Schedule a call"}}
/api/angelsend/ai/auto-replyGenerate Auto-Reply
Generate an AI-powered reply to an inbound email.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| originalEmail | string | Required | The original outbound email |
| replyEmail | string | Required | The inbound reply to respond to |
| leadId | string | Optional | Associated lead ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/ai/auto-reply" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"originalEmail": "user@example.com","replyEmail": "user@example.com"}'
Responses
{"success": true,"data": {"subject": "Re: ...","body": "Thanks for getting back to me..."}}
/api/angelsend/ai/follow-upsGenerate Follow-up Sequence
Generate a multi-step follow-up email sequence for a campaign.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadId | string | Required | Lead ID |
| initialEmail | string | Required | The initial outbound email |
| steps | number | Optional | Number of follow-up steps (default: 3) |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/ai/follow-ups" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"leadId": "abc123","initialEmail": "user@example.com"}'
Responses
{"success": true,"data": {"followUps": [{"dayOffset": 3,"subject": "Following up","body": "Just checking in..."},{"dayOffset": 7,"subject": "Last try","body": "One more thought..."}]}}
/api/angelsend/import/apolloImport from Apollo
Import leads from an Apollo.io CSV export into Scrappy.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| file | file | Required | Apollo CSV export file |
| projectId | string | Optional | Target project ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/import/apollo" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: multipart/form-data" \-d '{"file": ""}'
Responses
{"success": true,"data": {"imported": 200,"duplicates": 15,"errors": 2}}
/api/angelsend/import/hunterImport from Hunter
Import leads from a Hunter.io CSV export into Scrappy.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| file | file | Required | Hunter CSV export file |
| projectId | string | Optional | Target project ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/import/hunter" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: multipart/form-data" \-d '{"file": ""}'
Responses
{"success": true,"data": {"imported": 100,"duplicates": 5,"errors": 0}}
/api/angelsend/warmupSchedule Warmup
Schedule domain warmup sending via AngelSend.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| domain | string | Required | Domain to warm up |
| dailyVolume | number | Optional | Target daily send volume |
Example Request
curl -X POST "https://api.scrappy.gg/api/angelsend/warmup" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"domain": "string"}'
Responses
{"success": true}
/api/user/integrations/angelsendGet User AngelSend Config
Get the current user's AngelSend API key configuration.
Example Request
curl -X GET "https://api.scrappy.gg/api/user/integrations/angelsend" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"hasApiKey": true,"isUsingGlobal": false}}
/api/user/integrations/angelsendUpdate User AngelSend Config
Set a per-user AngelSend API key (overrides the global environment variable).
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| apiKey | string | Optional | AngelSend API key (null to remove) |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/user/integrations/angelsend" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true}
Credits
Credit balance and purchasing
3 endpoints/api/credits/balanceGet Credit Balance
Get the current user's credit balance
Example Request
curl -X GET "https://api.scrappy.gg/api/credits/balance" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"balance": 500,"configured": true,"costs": {"scrape": 1,"emailValidation": 0.5,"aiDiscovery": 5}}}
/api/credits/pricingGet Pricing Tiers
Get available credit pricing tiers for purchase
Example Request
curl -X GET "https://api.scrappy.gg/api/credits/pricing" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"tiers": [{"id": "starter","credits": 100,"price": 9.99},{"id": "pro","credits": 500,"price": 39.99}],"configured": true}}
/api/credits/checkoutCreate Checkout Session
Create a checkout session to purchase credits
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| pricingTierId | string | Required | ID of the pricing tier to purchase |
Example Request
curl -X POST "https://api.scrappy.gg/api/credits/checkout" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"pricingTierId": "abc123"}'
Responses
{"success": true,"data": {"url": "https://checkout.stripe.com/..."}}
{"success": false,"error": {"code": "SERVICE_UNAVAILABLE","message": "Credits system not configured"}}
Markdown Exports
Export websites to markdown format
7 endpoints/api/markdown-exportsList Exports
Get all markdown exports
Example Request
curl -X GET "https://api.scrappy.gg/api/markdown-exports" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"exports": [{"id": "abc123","name": "Example Site","url": "https://example.com","status": "COMPLETED","pageCount": 25}]}}
/api/markdown-exportsCreate Export
Create a new markdown export job
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Export name |
| url | string | Required | URL to export |
| exportType | string | Optional | Export typeOptions: SINGLE_PAGE, FULL_SITEDefault: SINGLE_PAGE |
| maxPages | number | Optional | Maximum pages to export (1-1000)Default: 100 |
| followExternal | boolean | Optional | Follow external links |
| useSitemap | boolean | Optional | Use sitemap.xml for discovery |
Example Request
curl -X POST "https://api.scrappy.gg/api/markdown-exports" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","url": "https://example.com"}'
Responses
{"success": true,"data": {"export": {"id": "abc123","status": "PENDING"}}}
/api/markdown-exports/[id]Get Export
Get export details
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Export ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/markdown-exports/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"export": {"id": "abc123","status": "COMPLETED"}}}
/api/markdown-exports/[id]Delete Export
Delete an export
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Export ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/markdown-exports/abc123" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/markdown-exports/[id]/pagesGet Export Pages
Get all pages from an export with their markdown content
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Export ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/markdown-exports/abc123/pages" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"pages": [{"id": "page123","url": "https://example.com/page","title": "Page Title","markdown": "# Page Content..."}]}}
/api/markdown-exports/[id]/downloadDownload Export
Download export as ZIP or single markdown file
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Export ID |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| format | string | Optional | Download formatOptions: zip, singleDefault: zip |
Example Request
curl -X GET "https://api.scrappy.gg/api/markdown-exports/abc123/download" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"note": "Returns file attachment"}
{"success": false,"error": {"code": "NOT_FOUND","message": "Export has no content"}}
/api/markdown-exports/[id]/retryRetry Export
Retry a failed export
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Export ID |
Example Request
curl -X POST "https://api.scrappy.gg/api/markdown-exports/abc123/retry" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"message": "Export retry started"}
Analytics
Pipeline overview, source performance, capacity planning, and credit burn rate metrics
4 endpoints/api/analytics/pipeline-overviewPipeline Overview
Get high-level pipeline metrics: lead counts by status, conversion rates, email validation rates, and recent activity.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | Optional | Filter by project ID |
| days | number | Optional | Lookback window in days (default: 30) |
Example Request
curl -X GET "https://api.scrappy.gg/api/analytics/pipeline-overview" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"totalLeads": 1250,"leadsByStatus": {"NEW": 420,"CONTACTED": 380,"QUALIFIED": 210,"UNQUALIFIED": 180,"ARCHIVED": 60},"emailValidationRate": 0.84,"newLeadsLast7Days": 145,"conversionRate": 0.168}}
/api/analytics/sourcesSource Analytics
Get performance metrics for each source: lead yield, success rate, and average run time.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | Optional | Filter by project ID |
| days | number | Optional | Lookback window in days (default: 30) |
Example Request
curl -X GET "https://api.scrappy.gg/api/analytics/sources" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"sources": [{"sourceId": "src_123","sourceName": "NYC Dentist Directory","totalJobs": 12,"successRate": 0.92,"totalLeads": 340,"avgLeadsPerJob": 28,"avgRunTimeMs": 45000,"lastRunAt": "2024-01-15T08:00:00Z"}]}}
/api/analytics/capacityCapacity Planning
Get capacity metrics including active sources, scheduled jobs, job queue depth, and estimated throughput.
Example Request
curl -X GET "https://api.scrappy.gg/api/analytics/capacity" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"activeSources": 24,"scheduledJobsNext24h": 8,"queueDepth": 3,"estimatedLeadsPerDay": 450,"workerUtilization": 0.35}}
/api/analytics/credit-burn-rateCredit Burn Rate
Get credit usage trends and burn rate projection.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| days | number | Optional | Lookback window in days (default: 30) |
Example Request
curl -X GET "https://api.scrappy.gg/api/analytics/credit-burn-rate" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"currentBalance": 8500,"dailyBurnRate": 125,"projectedDaysRemaining": 68,"burnByCategory": {"emailValidation": 80,"aiFeatures": 30,"scraping": 15},"usageTrend": [{"date": "2024-01-14","credits": 120},{"date": "2024-01-15","credits": 135}]}}
Admin
Admin-only endpoints for platform management
3 endpoints/api/admin/usersList All Users
Get all users with their statistics (admin only)
Example Request
curl -X GET "https://api.scrappy.gg/api/admin/users" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"users": [{"id": "abc123","email": "user@example.com","stats": {"projects": 5,"sources": 20,"leads": 500,"jobs": 50}}],"summary": {"total": 100,"active": 85,"newThisWeek": 10}}}
{"success": false,"error": {"code": "FORBIDDEN","message": "Admin access required"}}
/api/admin/metrics/summaryGet Metrics Summary
Get aggregated platform metrics (admin only). Note: Response does not use standard wrapper format.
Example Request
curl -X GET "https://api.scrappy.gg/api/admin/metrics/summary" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"database": {"users": 100,"projects": 500,"sources": 1000,"leads": 50000,"jobs": 2000},"queues": {"waiting": {"scraping": 5,"emailValidation": 10},"active": {"scraping": 2,"emailValidation": 5},"failed": {"scraping": 0,"emailValidation": 1}},"timestamp": "2024-01-01T00:00:00Z"}
/api/admin/metrics/prometheusPrometheus Query
Proxy Prometheus queries (admin only)
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | Required | Prometheus query string |
| type | string | Optional | Query typeOptions: instant, rangeDefault: instant |
| start | string | Optional | Start time for range queries (ISO 8601) |
| end | string | Optional | End time for range queries (ISO 8601) |
| step | string | Optional | Query resolution stepDefault: 15s |
Example Request
curl -X GET ?query=search term"https://api.scrappy.gg/api/admin/metrics/prometheus" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"status": "success","data": {"resultType": "vector","result": [{"metric": {"__name__": "up"},"value": [1704067200,"1"]}]}}
{"error": "Query parameter is required"}
Webhooks
Manage outbound webhooks for event notifications and receive inbound webhooks from external services
8 endpoints/api/user/webhooksList Webhooks
Get all configured outbound webhooks for the current user.
Example Request
curl -X GET "https://api.scrappy.gg/api/user/webhooks" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"webhooks": [{"id": "wh_123","url": "https://your-app.com/webhook","events": ["lead.created","lead.updated"],"enabled": true,"createdAt": "2024-01-01T00:00:00Z"}]}}
/api/user/webhooksCreate Webhook
Register an outbound webhook endpoint. Events are signed with HMAC-SHA256 via the X-Scrappy-Signature header.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Required | HTTPS endpoint to receive events |
| events | array | Required | Event types to subscribe to (e.g. lead.created, lead.updated, job.completed, email.validated) |
| secret | string | Optional | Secret for HMAC signature verification (auto-generated if omitted) |
| enabled | boolean | Optional | Enable the webhook on creation (default: true) |
Example Request
curl -X POST "https://api.scrappy.gg/api/user/webhooks" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"url": "https://example.com","events": []}'
Responses
{"success": true,"data": {"id": "wh_123","url": "https://your-app.com/webhook","secret": "whsec_abc123...","events": ["lead.created"]}}
/api/user/webhooks/{id}Get Webhook
Get a webhook by ID including recent delivery history.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Webhook ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/user/webhooks/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"id": "wh_123","url": "https://your-app.com/webhook","events": ["lead.created"],"enabled": true,"deliveries": [{"id": "del_456","event": "lead.created","status": "SUCCESS","responseCode": 200,"deliveredAt": "2024-01-15T10:30:00Z"}]}}
/api/user/webhooks/{id}Update Webhook
Update a webhook's URL, events, or enabled status.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Webhook ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Optional | Updated endpoint URL |
| events | array | Optional | Updated event list |
| enabled | boolean | Optional | Enable or disable |
Example Request
curl -X PATCH "https://api.scrappy.gg/api/user/webhooks/{id}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {}}
/api/user/webhooks/{id}Delete Webhook
Delete a webhook endpoint.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Webhook ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/user/webhooks/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/user/webhooks/{id}/deliveries/{deliveryId}/retryRetry Webhook Delivery
Manually retry a failed webhook delivery. Auto-retry uses 3 attempts with exponential backoff (5s / 25s / 125s).
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Webhook ID |
| deliveryId | string | Required | Delivery ID to retry |
Example Request
curl -X POST "https://api.scrappy.gg/api/user/webhooks/{id}/deliveries/{deliveryId}/retry" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"retryJobId": "job_789"}}
/api/webhooks/credCred.diy Webhook (Inbound)
Inbound webhook from cred.diy credits system. Verified via HMAC-SHA256 signature. Handles credit top-ups and subscription events.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| x-cred-signature | header | Required | HMAC-SHA256 signature for verification |
| x-cred-event | header | Required | Event type (e.g. credit.purchased, subscription.updated) |
Example Request
curl -X POST "https://api.scrappy.gg/api/webhooks/cred" \-H "Content-Type: application/json" \-d '{"x-cred-signature": "","x-cred-event": ""}'
Responses
{"received": true}
{"error": "Invalid signature"}
/api/webhooks/resendResend Email Webhook (Inbound)
Inbound webhook from Resend for transactional email delivery events (bounces, complaints, etc.).
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| svix-signature | header | Required | Svix signature for verification |
| type | string | Required | Event type (e.g. email.bounced, email.complained) |
Example Request
curl -X POST "https://api.scrappy.gg/api/webhooks/resend" \-H "Content-Type: application/json" \-d '{"svix-signature": "","type": "string"}'
Responses
{"received": true}
Enterprise
Organizations, API keys, source templates, proxy profiles, suppression lists, and data destinations
19 endpoints/api/organizationsList Organizations
Get all organizations the current user belongs to.
Example Request
curl -X GET "https://api.scrappy.gg/api/organizations" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"organizations": [{"id": "org_123","name": "Acme Corp","role": "OWNER","memberCount": 8}]}}
/api/organizationsCreate Organization
Create a new organization.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Organization name |
| domain | string | Optional | Company domain (for SSO) |
Example Request
curl -X POST "https://api.scrappy.gg/api/organizations" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name"}'
Responses
{"success": true,"data": {"id": "org_123","name": "Acme Corp"}}
/api/organizations/{id}Get Organization
Get organization details.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Organization ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/organizations/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {}}
/api/organizations/{id}/membersList Members
Get all members of an organization.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Organization ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/organizations/{id}/members" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"members": [{"userId": "u_123","email": "admin@acme.com","role": "OWNER","joinedAt": "2024-01-01"}]}}
/api/organizations/{id}/ssoSSO Configuration
Get SSO/SAML configuration for the organization.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Organization ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/organizations/{id}/sso" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"provider": "OKTA","enabled": true,"domain": "acme.com"}}
/api/organizations/{id}/ip-allowlistIP Allowlist
Get or manage IP allowlist for organization access control.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Organization ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/organizations/{id}/ip-allowlist" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"allowlist": ["192.168.1.0/24","10.0.0.0/8"],"enabled": true}}
/api/api-keysList API Keys
Get all API keys for programmatic access.
Example Request
curl -X GET "https://api.scrappy.gg/api/api-keys" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"apiKeys": [{"id": "key_123","name": "Production Key","prefix": "sk_prod_****","createdAt": "2024-01-01"}]}}
/api/api-keysCreate API Key
Generate a new API key. The full key is returned only once.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Key name/description |
| scopes | array | Optional | Permission scopes (e.g. ['leads:read', 'sources:write']) |
| expiresAt | string | Optional | ISO 8601 expiration date |
Example Request
curl -X POST "https://api.scrappy.gg/api/api-keys" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name"}'
Responses
{"success": true,"data": {"id": "key_123","name": "Production Key","key": "sk_prod_abc123...","prefix": "sk_prod_****"}}
/api/api-keys/{id}Delete API Key
Revoke an API key.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | API key ID |
Example Request
curl -X DELETE "https://api.scrappy.gg/api/api-keys/{id}" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true}
/api/source-templatesList Source Templates
Get reusable source configuration templates.
Example Request
curl -X GET "https://api.scrappy.gg/api/source-templates" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"templates": [{"id": "tmpl_123","name": "LinkedIn Directory Scraper","category": "Social","usageCount": 42}]}}
/api/source-templates/marketplaceTemplate Marketplace
Browse publicly shared source templates from other users.
Example Request
curl -X GET "https://api.scrappy.gg/api/source-templates/marketplace" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"templates": []}}
/api/source-templatesCreate Source Template
Create a reusable source configuration template.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Template name |
| description | string | Optional | Template description |
| config | object | Required | Source configuration to templatize |
| isPublic | boolean | Optional | Share on marketplace |
Example Request
curl -X POST "https://api.scrappy.gg/api/source-templates" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","config": {}}'
Responses
{"success": true,"data": {"id": "tmpl_123"}}
/api/proxy-profilesList Proxy Profiles
Get configured proxy profiles for scraping.
Example Request
curl -X GET "https://api.scrappy.gg/api/proxy-profiles" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"proxies": [{"id": "proxy_123","name": "US Residential","type": "RESIDENTIAL","country": "US","successRate": 0.94}]}}
/api/proxy-profilesCreate Proxy Profile
Add a proxy profile for use in scraping jobs.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Profile name |
| type | string | Required | Proxy typeOptions: RESIDENTIAL, DATACENTER, MOBILE |
| host | string | Required | Proxy host |
| port | number | Required | Proxy port |
| username | string | Optional | Proxy username |
| password | string | Optional | Proxy password (encrypted at rest) |
| country | string | Optional | Country code (e.g. 'US') |
Example Request
curl -X POST "https://api.scrappy.gg/api/proxy-profiles" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","type": "string","host": "string","port": 1}'
Responses
{"success": true,"data": {"id": "proxy_123"}}
/api/suppression-listList Suppression Lists
Get email suppression lists for compliance.
Example Request
curl -X GET "https://api.scrappy.gg/api/suppression-list" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"lists": [{"id": "sl_123","name": "Global Unsubscribes","entryCount": 1250}]}}
/api/suppression-list/{id}/entriesList Suppression Entries
Get entries in a suppression list.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Suppression list ID |
Example Request
curl -X GET "https://api.scrappy.gg/api/suppression-list/{id}/entries" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"entries": [{"email": "unsubscribed@example.com","addedAt": "2024-01-15"}]}}
/api/data-destinationsList Data Destinations
Get configured data sync destinations (webhooks, databases, CRMs).
Example Request
curl -X GET "https://api.scrappy.gg/api/data-destinations" \-H "Authorization: Bearer YOUR_API_KEY"
Responses
{"success": true,"data": {"destinations": [{"id": "dest_123","name": "HubSpot CRM","type": "WEBHOOK","enabled": true}]}}
/api/data-destinationsCreate Data Destination
Configure a new data sync destination.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Destination name |
| type | string | Required | Destination typeOptions: WEBHOOK, DATABASE, CRM |
| config | object | Required | Destination-specific configuration |
| enabled | boolean | Optional | Enable sync on creation (default: true) |
Example Request
curl -X POST "https://api.scrappy.gg/api/data-destinations" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Example Name","type": "string","config": {}}'
Responses
{"success": true,"data": {"id": "dest_123"}}
/api/data-destinations/{id}/syncTrigger Sync
Manually trigger a data sync to a destination.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Destination ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| leadIds | array | Optional | Specific lead IDs to sync (syncs all if omitted) |
Example Request
curl -X POST "https://api.scrappy.gg/api/data-destinations/{id}/sync" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json"
Responses
{"success": true,"data": {"synced": 150,"failed": 2}}
Infrastructure
Health checks and monitoring endpoints
1 endpoint/api/healthHealth Check
Check the health status of all services
Example Request
curl -X GET "https://api.scrappy.gg/api/health"
Responses
{"status": "healthy","services": {"database": {"status": "healthy","latency": 5},"redis": {"status": "healthy","latency": 2}}}
Need help? Check out our User Guides or contact support.