Skip to main content

Suppression

Suppression removes contacts from a submission before enrichment runs. Suppressed rows are not billed and don't count toward processed_rows or failed_rows — they're reported on their own via suppressed_rows in the status response.

Two ways to send a suppression list, pick whichever fits your workflow:

Option 1 — Stored list — suppression_list_id​

Pre-upload a suppression CSV via /api/v1/suppression-csv/ and reference it by id. Good when the same list is reused across many jobs.

{
"selected_layers": ["L1", "L2"],
"rows": [ ... ],
"suppression_list_id": "d31f8c8c-7b8a-4a3f-9f22-6c9d2a0b1a44"
}

Option 2 — Inline rows — suppression​

Send the suppression rows directly in the request body. Each entry is a free-form {column: value} object — DataForge matches on email, LinkedIn URL, phone, or name+company depending on what you include.

{
"selected_layers": ["L1"],
"rows": [ ... ],
"suppression": [
{ "email": "do-not-contact@acme.com" },
{ "linkedin_url": "https://www.linkedin.com/in/jsmith" },
{ "first_name": "John", "last_name": "Smith", "company_name": "Globex" }
]
}

Inline suppression also works on the multipart upload — put the array inside the meta JSON. The older name suppression_rows is also accepted.

If both suppression_list_id and inline suppression are sent, inline wins.

Billing​

Credits are held for row_count at submit time before suppression is applied. On completion:

  • Suppressed rows are refunded in full.
  • Enriched rows are billed per-layer at the current rate.
  • Skipped / failed rows are refunded.

So the net charge equals enriched_rows × per-row price regardless of how many you suppressed.