API operations
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /data/download | Request or download consumer deletion request data as a ZIP archive |
POST | /data/upload | Upload new status response files |
POST | /data/amend | Correct or update previously submitted status responses |
Base URL: https://api.drop.privacy.ca.gov
Download
GET /data/download
Request the current ZIP archive. If the ZIP is ready, the response returns the ZIP file. If the ZIP is still being prepared, the response returns a JSON message and the data broker should call GET /data/download again later.
Request headers:
X-API-KEY: your-api-key-here
Accept: application/zip, application/json
Curl example:
curl -X GET "https://api.drop.privacy.ca.gov/data/download" \
-H "accept: application/zip, application/json" \
-H "X-API-KEY: your-api-key-here" \
--output download.zip
PowerShell example:
$apiKey = "your-api-key-here"
$url = "https://api.drop.privacy.ca.gov/data/download"
$headers = @{
"X-API-KEY" = $apiKey
"Accept" = "application/zip, application/json"
}
Invoke-WebRequest -Uri $url -Headers $headers -OutFile "download.zip"
Response codes:
| Code | Meaning | Action |
|---|---|---|
| 200 ZIP | ZIP is ready and returned in the response | Download and process the ZIP |
| 200 No data | No new consumer request data is available | No action needed. Try again later based on your processing schedule |
| 202 Preparing | The request was received and the download is being prepared | Call GET /data/download again later |
| 401 Unauthorized | API key is missing or invalid | Fix or regenerate the API key and try again |
| 403 Forbidden | Broker is not eligible to download data | Resolve account, registration, payment, or access issue and try again |
| 403 No selected lists | Broker has not selected any list types | No identifier list preferences are enabled. Select+ at least one list and try again. |
| 404 Not Found | Endpoint URL is wrong or resource path does not exist | Correct the URL/path and retry |
| 429 Too Many Requests | Too many requests | Wait 30 seconds and retry |
| 500 Server Error | Temporary system error | Retry later |
ZIP response:
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="20260312_4821_DROP.zip"
JSON responses:
{"message":"Complete the current batch or contact DROP support if a re-download is needed."}
ZIP contents:
The ZIP contains one CSV per selected list type. If a selected list has no new records, the CSV contains only the header row. If any previously delivered identifiers were removed, the ZIP also includes one Removed CSV file.
| File example | List |
|---|---|
| 20260312_4821_Email.csv | |
| 20260312_4821_NDZ.csv | First Name + Last Name + DOB + ZIP |
| 20260312_4821_Removed.csv | Removed identifiers across all selected list types |
Upload
There are two upload endpoints. Both accept the same multipart/form-data request. Only the purpose differs.
POST /data/upload
Upload new status responses.
POST /data/amend
Upload a correction or update to responses submitted previously.
Request format
Both endpoints use multipart/form-data with the field name files.
Request headers:
X-API-KEY: your-api-key-here
Content-Type: multipart/form-data
Accept: application/json
Curl example (new):
curl -X POST "https://api.drop.privacy.ca.gov/data/upload" \
-H "accept: application/json" \
-H "X-API-KEY: your-api-key-here" \
-F "files=@20260312_4821_Email.csv;type=text/csv"
Curl example (amend):
curl -X POST "https://api.drop.privacy.ca.gov/data/amend" \
-H "accept: application/json" \
-H "X-API-KEY: your-api-key-here" \
-F "files=@20260312_4821_Email.csv;type=text/csv"
Response format
Both endpoints return JSON showing which files were accepted for processing and which files were rejected.
Accepted files are queued for validation. Full row-level validation may continue after the response is returned.
| Field | Type | Description |
|---|---|---|
| message | string | Summary of the upload result |
| acceptedCount | integer | Number of files accepted for validation |
| rejectedCount | integer | Number of files rejected before validation |
| accepted | array | Files accepted for validation, each with file name and file size bytes |
| rejected | array | Files rejected before validation, each with file name and message |
JSON responses:
Example response with accepted files:
{
{
"message": "Upload received. Accepted files were queued for validation.",
"acceptedCount": 1,
"rejectedCount": 0,
"accepted": [
{
"fileName": "20260312_4821_Email.csv",
"fileSizeBytes": 2849112
}
],
"rejected": []
}
Example response with accepted and rejected files:
{
{
"message": "Upload received. Accepted files were queued for validation. Rejected files were not accepted.",
"acceptedCount": 1,
"rejectedCount": 1,
"accepted": [
{
"fileName": "20260312_4821_Email.csv",
"fileSizeBytes": 2849112
}
],
"rejected": [
{
"fileName": "notes.txt",
"message": "Only CSV files are accepted."
}
]
}
Common rejection messages
| Message | Meaning |
|---|---|
| No CSV file was provided | The request did not include a CSV file |
| Only CSV files are accepted | The uploaded file is not a CSV file |
| Invalid CSV header. Expected: Id,Status. | The first row is not exactly Id,Status |
| A file with this name was already uploaded for the current download. Use a unique suffix and try again | The file name was already used for this download |
| File could not be read as UTF-8 CSV | The file is unreadable or not UTF-8 encoded |
Retry guidance
| Scenario | Retry? | Notes |
|---|---|---|
429 Too Many Requests | Yes | Wait 30 seconds and try again |
500 Server Error | Yes | Retry later |
401 Unauthorized | No | Correct or regenerate the API key before trying again |
403 Forbidden | No | Resolve the account, registration, payment, or access issues, and select at least one list type before trying again |
404 Not Found | No | Fix the URL or path before trying again |
400 Bad Request | No | Fix the request, file, or CSV format before retrying |
409 Conflict | No | Complete the required action before trying |
| Duplicate file name rejection | No | Use a unique optional suffix in the file name and upload again |
| Invalid CSV header rejection | No | Fix the header to Id,Status and upload again |
| Wrong file type rejection | No | Upload a CSV file |
| File unreadable rejection | No | Save the file as UTF-8 CSV and upload again |