| GET | /v1/open-api/campaigns | List campaigns | Not stated |
| GET | /v1/open-api/campaigns/{id}/lead-lists | List a campaign's lead lists | Not stated |
| GET | /v1/open-api/campaigns/{id}/statistics | Get a campaign's statistics, 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 `leadStatus | Not stated |
| POST | /v1/open-api/campaigns/{id}/leads | Upload leads into a campaign, 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 | 1-1,000 leads per request; always creates a NEW lead list; collection starts only when the campaign is ACTIVE |
| POST | /v1/open-api/lead-lists/{id}/leads | Append leads to an existing lead list, Appends resolved LinkedIn identifiers to an existing "Paste profile URLs" lead list. Unlike
upload, this never creates a new list, it targets an existing one by id. Core rejects the
append with a 400 | Not stated |
| GET | /v1/open-api/leads | List leads | Not stated |
| POST | /v1/open-api/leads/search | Look a lead up by email or LinkedIn profile URL, 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 ow | Not stated |
| PUT | /v1/open-api/leads/tags | Apply tags to a batch of leads, Adds every tag in `addTagIds` to every lead in `leadInUserIds`, in one call. Applying a
tag a lead already carries is a no-op, not an error. Every id is checked before anything is written: a lead tha | Not stated |
| DELETE | /v1/open-api/leads/tags | Remove tags from a batch of leads, Removes only the tags named in `removeTagIds` from every lead in `leadInUserIds`. Tags
those leads carry that are not named are left in place, and the tags themselves are not
deleted from your account | Not stated |
| GET | /v1/open-api/leads/{id} | Get a single lead by ID | Not stated |
| GET | /v1/open-api/leads/{id}/activity | List a lead's activity log, 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. | Not stated |
| GET | /v1/open-api/leads/{id}/conversation | Get a lead's conversation, The lead's LinkedIn conversation: participants, read, starred and archived state, and who
sent the last message and when. A lead without a LinkedIn conversation answers 404. | Not stated |
| PUT | /v1/open-api/leads/{leadId}/blacklist | Blacklist a lead, Blacklists the lead so it is no longer contacted by any of your campaigns. Idempotent: blacklisting a lead that is already blacklisted is a no-op, not an error. | Not stated |
| DELETE | /v1/open-api/leads/{leadId}/blacklist | Whitelist a lead, Removes the lead's blacklisted state. Idempotent: whitelisting a lead that is not blacklisted is a no-op, not an error. | Not stated |
| POST | /v1/open-api/leads/{leadId}/resume | Resume a lead's paused campaigns, Reactivates every campaign currently paused for this lead. Resuming is lead-wide: it is
not scoped to a single campaign. Idempotent: resuming a lead with nothing paused is a no-op, not an error. | Not stated |
| GET | /v1/open-api/conversations/{conversationId}/messages | List a conversation's messages, The messages of a lead's LinkedIn conversation, newest first. They are read live from
LinkedIn on every call, so a response reflects the conversation as it is right now. Take
`conversationId` from the | Not stated |
| POST | /v1/open-api/leads/{leadId}/messages | Send a message to a lead's existing LinkedIn conversation, Sends `message` into the lead's existing LinkedIn conversation. The lead must already
have a conversation, this endpoint never starts a new one. Sending pauses the lead's outbound automation: any ca | sends a real LinkedIn message into an existing conversation |
| GET | /v1/open-api/custom-lead-fields | List custom lead field definitions, The account's custom lead field definitions, use `id` to set or unset a value with the lead custom-field endpoints. Archived fields are not included. | Not stated |
| PUT | /v1/open-api/leads/{leadId}/custom-fields/{customLeadFieldId} | Set a lead's custom field value, Sets `value` for `customLeadFieldId` on `leadId`, creating it if none is stored yet and
overwriting it otherwise, the caller never needs to know which happened. `leadId` must be one of your own lead | Not stated |
| DELETE | /v1/open-api/leads/{leadId}/custom-fields/{customLeadFieldId} | Unset a lead's custom field value, Removes the value stored for `customLeadFieldId` on `leadId`, if any. Unsetting is idempotent: a `customLeadFieldId` that does not exist, that you do not own,
or that has no value stored for this lea | Not stated |
| GET | /v1/open-api/teams | List teams the caller belongs to, Every team the API caller is a member of, with campaign rollup analytics inlined
into each row. | Not stated |
| GET | /v1/open-api/teams/{teamId}/members | List team members, 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 sta | Not stated |
| GET | /v1/open-api/tags | List tags | Not stated |
| POST | /v1/open-api/tags | Create a tag | Not stated |