---
title: "Add members"
method: POST
path: "/v2/lists/{listId}/members"
tags: ["Lists"]
---

# Add members

`POST /v2/lists/{listId}/members`

## Request

- Base URL: `https://api.reversecontact.com`
- URL: `https://api.reversecontact.com/v2/lists/{listId}/members`
- Auth: HTTP bearer

Adds up to 1,000 Signals and answers when they are done, with one result per Signal in request order (results[]: added, already_present, not_found, refused, failed, not_reached). A person is found from a Social URL, an email, or a first and last name with a company. A new member is charged its identity price: 1 credit for a Social URL from saved data (2 with live: true), 2 for an email or a name. A member already on the List is free and left as it is; a Signal no one matches is kept as Pending Intake, free. One invalid Signal refuses the request with details.signalIndex. For more Signals, data families, a credit ceiling or a webhook, use the import (intake/signals).

## Path parameters

- `listId` string, uuid, required: List id

## Request body

- object
  - `signals` object[], required
    - `linkedinUrl` string: Person or company Social URL
    - `url` string: Alias of linkedinUrl
    - `email` string: Person email
    - `firstName` string: Person first name (with lastName and a company)
    - `lastName` string: Person last name (with firstName and a company)
    - `companyDomain` string: Company domain: a person hint, or a company
    - `companyName` string: Company name hint for a person
    - `domain` string: Company domain
    - `companyId` string: Company id (com_...), company Lists
    - `externalId` string: Your own identifier for this line (1 to 200 characters, no control characters). Echoed in the line result and kept on the member it names; the first one a member receives is kept. Never used to find the person.
  - `source` 'file' | 'paste'
  - `live` boolean: For Social URL Signals: true fetches the profile live (2 credits); omitted or false uses saved data (1 credit).

## Response `200`

Add summary with per-Signal results

- object
  - `success` true, required
  - `data` object, required
    - `inserted` integer, required: Members added
    - `skipped` integer, required: Signals naming a member already on the List
    - `refused` integer: Signals refused (member limit, ambiguous identity)
    - `creditsConsumed` number, required: Credits charged
    - `unresolvedCount` integer: Signals kept as Pending Intake
    - `stoppedReason` string: Set when a stop left later Signals unread: quota, member_cap, pending_cap
    - `results` object[], required: One entry per Signal, in request order
      - `index` integer, required: Position of the Signal in the request (0-based)
      - `outcome` 'added' | 'already_present' | 'not_found' | 'refused' | 'failed' | 'not_reached', required
      - `externalId` string: Your identifier, as sent
      - `memberId` string, uuid: Member the line names
      - `entityId` string: Person or company id
      - `pendingId` string, uuid: Pending Intake kept for a not_found line
      - `reason` 'member_limit' | 'pending_intake_limit' | 'insufficient_credits' | 'ambiguous_identity' | 'data_subject_blocked' | 'identity_unavailable' | 'quota_unavailable' | 'stopped'
  - `error` unknown, required
  - `quotas` V2Quotas, required
    - `creditsConsumed` number, required: Credits used for this request after pricing resolution
    - `workspace` object, required
      - `id` string, required: Workspace identifier
      - `credits` V2Credits, required
        - `total` number, required: Total credits in your plan
        - `used` number, required: Credits consumed so far
        - `left` number, required: Remaining credits
      - `hasUnlimitedCredits` boolean, required: Whether workspace credits are unlimited
      - `allowDailyOvercost` boolean, required: Whether the workspace may exceed its daily cap (Enterprise only)
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
    - `key` object, nullable, required
      - `id` string, required: API key identifier
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `creditLimits` object, required: Credit limits set on this API key. Each is null when the key has no such limit.
        - `daily` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `monthly` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `total` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
  - `metadata` V2Metadata, required
    - `requestId` string, required: Unique identifier for this request
    - `executionTimeMs` integer, required: Total execution time in milliseconds
    - `updatedAt` string: Last upstream update timestamp (ISO 8601). Present only when available.

## Other responses

- `400`: Invalid JSON body or endpoint-specific business validation
- `401`: Missing or invalid API key or OAuth access token
- `402`: No credits left. Purchase more to continue.
- `403`: Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)
- `404`: Data not found
- `409`: The List reached its 25,000 member or Pending Intake limit
- `422`: Schema or validation error, unresolved internal id, or disposable email domain
- `429`: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
- `451`: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
- `504`: The request ran out of time; Signals already added stay added

---

[API](https://skmtc.dev/scrapin/apis/reverse-contact-api.md) - [All operations](https://skmtc.dev/scrapin/apis/reverse-contact-api/llms.txt) - [OpenAPI document](https://skmtc.dev/scrapin/apis/reverse-contact-api/revisions/7d02242af2a9?raw)
