Download OpenAPI specification:Download
Read-only public API for your Dripify campaigns and leads, secured with an API key
(X-Api-Key header — generate one from Settings → API & Integrations).
Requests are limited to 60 per minute and 5,000 per day, per API key. Authenticated
responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
A rejected key is answered before the limiter runs, so a 401 carries none. Exceeding
the limit returns 429 with a Retry-After header giving the number of seconds to wait.
| campaignId | integer <int64> Restrict results to leads belonging to this campaign. Applied only when leadListId is not provided: a lead list already belongs to a single campaign, so when both are supplied leadListId takes precedence and campaignId is ignored. The id is not validated: one that is unknown to your account simply matches no leads. |
| leadListId | integer <int64> Restrict results to leads belonging to this lead list. When both leadListId and campaignId are supplied, results are scoped to the lead list and campaignId is ignored. The id is not validated: one that is unknown to your account simply matches no leads. |
| status | string (LeadStatus) Enum: "READY_FOR_PROCESSING" "PROCESSING_ENDED" "PROCESS_CORRUPTED" "PROCESSING_PAUSED" Restrict results to leads with at least one campaign membership at this status. A lead in several campaigns is returned once. |
| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "id": 0,
- "linkedinProfileUrl": "string",
- "publicId": "string",
- "firstName": "string",
- "lastName": "string",
- "pictureUrl": "string",
- "occupation": "string",
- "location": "string",
- "blacklisted": true,
- "lastAction": {
- "sequenceEventType": "CONNECT_SENT",
- "createdAt": "2019-08-24T14:15:22Z"
}
}
], - "nextCursor": "string",
- "limit": 0
}| id required | integer <int64> The lead's ID. |
{- "id": 0,
- "linkedinProfileUrl": "string",
- "publicId": "string",
- "firstName": "string",
- "lastName": "string",
- "pictureUrl": "string",
- "occupation": "string",
- "title": "string",
- "company": "string",
- "location": "string",
- "city": "string",
- "country": "string",
- "website": "string",
- "connectionsCount": 0,
- "premium": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "emailFoundAt": "2019-08-24T14:15:22Z",
- "emailAlternativeSearchedAt": "2019-08-24T14:15:22Z",
- "blacklisted": true,
- "leadInCampaigns": [
- {
- "campaignId": 0,
- "campaignName": "string",
- "leadInCampaignStatus": "READY_FOR_PROCESSING"
}
]
}The lead's timeline events, newest first — the same events the Dripify UI shows for
this lead. error is present only on events that represent a failure.
| id required | integer <int64> The lead's ID. |
| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "leadInUserId": 0,
- "campaignId": 0,
- "campaignName": "string",
- "sequenceEventType": "CONNECT_SENT",
- "error": "UNABLE_TO_WITHDRAW",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string",
- "limit": 0
}The lookup value travels in the body so it never reaches an access log or a browser history. One value can match several leads, so the response is a list. Results are always limited to the caller's own leads.
A value matching more than 100 profiles is answered with 400 rather than a partial list, because a truncated match set could omit a lead you own. Use a more specific value, such as a personal address rather than a shared company one.
string <email> <= 320 characters Email address to match. Never echoed back in the response. | |
| linkedinUrl | string <= 2048 characters Full LinkedIn profile URL, for example |
{- "linkedinUrl": "string"
}[- {
- "id": 0,
- "linkedinProfileUrl": "string",
- "publicId": "string",
- "firstName": "string",
- "lastName": "string",
- "pictureUrl": "string",
- "occupation": "string",
- "title": "string",
- "company": "string",
- "location": "string",
- "city": "string",
- "country": "string",
- "website": "string",
- "connectionsCount": 0,
- "premium": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "emailFoundAt": "2019-08-24T14:15:22Z",
- "emailAlternativeSearchedAt": "2019-08-24T14:15:22Z",
- "blacklisted": true,
- "lastAction": {
- "sequenceEventType": "CONNECT_SENT",
- "createdAt": "2019-08-24T14:15:22Z"
}
}
]| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "id": 0,
- "name": "string",
- "status": "DRAFT",
- "locked": true,
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string",
- "limit": 0
}| id required | integer <int64> The campaign's ID. |
| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "id": 0,
- "name": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "totalLeadsCount": 0,
- "leadsNumberToCollect": 0,
- "searchStatus": "READY_FOR_SEARCH"
}
], - "nextCursor": "string",
- "limit": 0
}Counts and rates for one campaign, the same numbers the Dripify campaign screen shows.
Rates are percents rounded to one decimal place, so parse them as a decimal type. The
counters under leadStatusBreakdown are a live snapshot and need not add up to
totalLeads.
| id required | integer <int64> The campaign's ID. |
{- "campaignId": 0,
- "totalLeads": 0,
- "contactedLeads": 0,
- "leadStatusBreakdown": {
- "inProgress": 0,
- "finished": 0,
- "failed": 0,
- "blacklisted": 0,
- "gettingReady": 0,
- "waiting": 0,
- "paused": 0,
- "uploading": 0,
- "transferred": 0
}, - "acceptanceRate": 0,
- "acceptanceRateLeads": 0,
- "replyRate": 0,
- "replyRateLeads": 0,
- "leadListsCount": 0,
- "active": true,
- "searchActive": true,
- "transferActive": true
}Creates a new lead list in the campaign from the supplied LinkedIn identifiers — this
endpoint always creates a new list, it never appends to an existing one. Each item in
leads must supply exactly one of linkedinUrl or publicId; duplicates within the
same request are collapsed before the list is created.
Collection only starts once the campaign is ACTIVE — enabling/disabling a campaign is not part of the public API in v1 and must be done from the Dripify UI.
| id required | integer <int64> The campaign's ID. |
| name | string <= 120 characters Optional label for the created lead list. Defaults to a generated name. |
required | Array of objects (UploadLead) [ 1 .. 1000 ] items |
{- "name": "string",
- "leads": [
- {
- "linkedinUrl": "string",
- "publicId": "string"
}
]
}{- "leadList": {
- "id": 0,
- "name": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "totalLeadsCount": 0,
- "leadsNumberToCollect": 0,
- "searchStatus": "READY_FOR_SEARCH"
}, - "acceptedCount": 0,
- "duplicateCount": 0
}Every team the API caller is a member of, with campaign rollup analytics inlined into each row.
| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "id": 0,
- "name": "string",
- "membersCount": 0,
- "callerRole": "OWNER",
- "statistics": {
- "activeCampaignsCount": 0,
- "unreadMessagesCount": 0,
- "acceptanceRate": 0,
- "replyRate": 0
}
}
], - "nextCursor": "string",
- "limit": 0
}The members of one of your teams, each with the statistics the Dripify team screen shows.
You must be the team's OWNER or MANAGER; any other team answers 404. Ordering depends on
live subscription state, so treat nextCursor as short-lived.
| teamId required | integer <int64> The team's ID. |
| cursor | string <= 128 characters Opaque marker for the next page. Take it from the previous response's |
| limit | integer <int32> [ 1 .. 100 ] Default: 25 Maximum items to return. Values above 100 are rejected. |
{- "items": [
- {
- "userId": "string",
- "firstName": "string",
- "lastName": "string",
- "pictureUrl": "string",
- "role": "OWNER",
- "lastActiveAt": "2019-08-24T14:15:22Z",
- "statistics": {
- "activeCampaignsCount": 0,
- "acceptanceRate": 0,
- "replyRate": 0,
- "unreadMessagesCount": 0
}
}
], - "nextCursor": "string",
- "limit": 0
}