> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dncscrub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API Concepts

> Before you start integrating with the CCC API, it's important to understand these key concepts. 

## Projects and Campaigns

Your DNCScrub account is organized into a hierarchy of **Projects** and **Campaigns**. This structure allows you to organize your account into meaningful units so you can apply different compliance settings to each one as well as have reporting on each one. For example, you might create separate projects for Customer Service, Lead Generation, or Winbacks. You can also organize projects based on the type of scrub you wish to perform, such as having projects for Full Scrub, Litigator Only, or Wireless Only.

Using Projects and Campaigns is **optional** — if you choose not to use them, all scrubs are processed under the **Master Project** and **Default Campaign**.

| Parameter    | Description                                                               |
| ------------ | ------------------------------------------------------------------------- |
| `projId`     | Optional. Specifies the project in which the action should be performed.  |
| `campaignId` | Optional. Specifies the campaign in which the action should be performed. |

## TLS Requirement

All API calls must be made with **TLS 1.2 or above**. Requests using older TLS
versions will be denied.

```csharp theme={null}
// C# - If not using modern clients, ensure TLS 1.2 is used
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
```

## Atomic Operations

All operations are atomic by default, meaning that either all parts of a request complete successfully or none of them do. The default behavior can be overridden by passing the parameter `ignoreInvalid=1` to the API call.

<Warning>
  For example, if you attempt to add multiple phone numbers to your Internal DNC
  database and one phone number is invalid (e.g., "AAA" instead of a 10-digit
  number), the **entire request will fail** and no numbers will be added. This
  is why it's important to pass clean, well-structured data to the API.
</Warning>

### Best Practices for Atomic Operations

* Pass clean data to the API. Ensure all phone numbers are exactly 10 digits.
* Handle error responses appropriately in your code
* Consider batching requests to isolate potential failures

## Phone Number Format

All phone numbers must be:

* **10 digits** (no country code)
* **Numeric only** (no dashes, spaces, or special characters)

| Valid        | Invalid          |
| ------------ | ---------------- |
| `5039367187` | `503-936-7187`   |
| `7075276405` | `1-707-527-6405` |

## Response Formats

### JSON Output

For the Full Scrub APIs, request JSON by adding `output=json` to your request:

```json theme={null}
[
  {
    "Phone": "7075276405",
    "ResultCode": "D",
    "Reason": "National (USA) 2003-06-01;;;",
    "RegionAbbrev": "CA",
    "Country": "US",
    "Locale": "Santa Rosa",
    "CarrierInfo": "9740;RBOC;\"AT&T California:AT&T California\"",
    "LineType": "AllOther"
  }
]
```

### CSV Output

For legacy reasons CSV is the default output format, or request it explicitly with \`output=csv':

```
7075276405,D,,National (USA) 2003-06-01;;;,CA,US,Santa Rosa,...
```

## HTTP Methods

| Method | When to Use                               |
| ------ | ----------------------------------------- |
| `GET`  | For processing 10 or fewer phone numbers  |
| `POST` | For processing more than 10 phone numbers |

<Warning>
  If you will process more than 10 phone numbers, you **must** use HTTP POST
  instead of HTTP GET. If you don't know how many phone numbers you will
  process, use HTTP POST to be safe. we very large batches, consider automating
  with
</Warning>

## Error Handling

Successful requests return HTTP status code `200`. Failed requests return `4xx` status codes with an error message in the response body. `502` can occur under heavy load and the recommendation is to retry these requests with exponential backoff.

| Status Code | Meaning                                                                      |
| ----------- | ---------------------------------------------------------------------------- |
| `200`       | Success                                                                      |
| `400`       | Bad Request - Invalid parameters                                             |
| `401`       | Unauthorized - Invalid or missing API key                                    |
| `429`       | Too Many Requests - Rate limit exceeded                                      |
| `502`       | Bad Gateway - Server overload or maintenance. Retry with exponential backoff |
