Integrate DNC LATAM with Twilio
DNC LATAM · Compliance guides
The pattern is simple: your dialer or CPaaS app calls the DNC LATAM API before Twilio connects. Twilio places the session you authorize. It does not query Mexico REPEP (PROFECO), Argentina Registro Nacional No Llame (AAIP), or Colombia RNE (CRC) for you. If you skip the gate, a "DNC-looking" US stack can still launch +52, +54, or +57 traffic.
This page uses only the public request and response shape from docs.dnclatam.com. CPaaS packaging: DNC for CPaaS. Generic dialer: integrate with a dialer.
Where the check belongs
- Your backend receives an outbound intent (agent click, queue, or campaign worker).
- You read the destination number and pick
mx,ar, orco. - You POST that country and a phone array to DNC LATAM from the server.
- If the number is in
prohibited_numbers_to_call, you do not tell Twilio to connect. - If the number is in
safe_numbers_to_call, you proceed with your existing Twilio flow. - If the number is invalid, you fix the input. Do not dial it "to see."
A country code is not enough. Resolve the full E.164 destination before you pick a list. +52, +54, and +57 go here. A +1 number is not automatically a US number: NANP also covers Canada and Caribbean destinations. Send US numbers to your FTC / TCPA vendor. Do not treat every +1 as that vendor's job. Twilio plus EVS7 or DNC.com does not cover REPEP. DNC.com alternative for LATAM.
Request shape (public docs)
Synchronous v1, from the published quickstart. Authenticate with
a Bearer API key. Every POST /v1/scrub requires an
Idempotency-Key header. Missing it returns
400 missing_idempotency_key. Generate a new opaque
UUID for every logical batch. Reuse that key only when retrying
the exact same country and phones array.
Do not derive it from phone numbers. Do not call this from
browser code.
POST https://api.dnclatam.com/v1/scrub
Authorization: Bearer $DNC_LATAM_API_KEY
Idempotency-Key: $DNC_LATAM_IDEMPOTENCY_KEY
Content-Type: application/json
{
"country": "mx",
"phones": ["+52 55 1234 5678", "55 8765 4321", "abc"]
}
Set DNC_LATAM_IDEMPOTENCY_KEY to a fresh UUID before
the first POST of that batch (the public quickstart uses
uuidgen). Use ar for Argentina and
co for Colombia. v1 is for up to 10,000 inputs and a
15-second budget.
Larger list loads use durable POST /v2/scrub as
documented. CSV stays in the panel, not in Twilio.
Response shape (public docs)
{
"prohibited_numbers_to_call": ["+52 55 1234 5678"],
"safe_numbers_to_call": ["55 8765 4321"],
"invalid_numbers": [
{ "input": "abc", "reason": "unparseable" }
],
"summary": {
"total_checked": 3,
"prohibited_numbers": 1,
"safe_numbers": 1,
"invalid_numbers": 1
},
"scrub_record": {
"record_id": "00000000-0000-4000-8000-000000000001",
"record_version": "1",
"surface": "api_v1",
"request_id": "req_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"organization": { "name": "Your company" },
"country": "mx",
"registry": {
"authority": "PROFECO",
"mode": "snapshot",
"source_observed_at": "2026-09-04T00:00:00.000Z"
},
"status": "succeeded",
"counts": {
"submitted": 3,
"prohibited": 1,
"safe": 1,
"invalid": 1
},
"submitted_at": "2026-09-04T00:00:00.000Z",
"completed_at": "2026-09-04T00:00:00.000Z",
"record_issued_at": "2026-09-04T00:00:00.000Z"
}
}
Example numbers and record IDs are illustrative. Their sample
classification explains the format. It is not a live-registry
statement. safe_numbers_to_call means not found on
the selected official list at check time. It is not consent and
not permission under every other rule.
scrub_record is the phone-free screening record
attached on a successful v1 scrub. Persist it. v1 does not keep
it. No phones in that object. Result classes:
response guide.
Record product page:
screening records.
Twilio-specific notes we will not invent
We will not invent Twilio webhook field names, TwiML verbs, or
Studio widget IDs on this page. Your Twilio implementation
already has a server hop that decides whether to start an
outbound session. Put the DNC LATAM POST on that hop. Refuse
prohibited. Persist the dated screening record in your system.
v1 documents x-retention: zero on successful
responses: we do not keep the phone list.
Batch the campaign file before agents can click. Realtime-check the number that just arrived in the CRM. Batch vs realtime. Aircall sibling: integrate with Aircall.
From $500/month per country at 10,000 checks. Estudio Miotti. Official REPEP, No Llame, and RNE. Not a US TCPA scrubber. API product. Scrubbing.
Questions, answered
Does Twilio include Mexico REPEP or Argentina No Llame? +
Twilio is a CPaaS. It places the call or message you ask for. Official REPEP (PROFECO), No Llame (AAIP), and RNE (CRC) checks are a separate gate you run before you tell Twilio to connect.
Where does the DNC LATAM call sit? +
On your server, before connect. Your app receives the destination number, posts country plus phones to the DNC LATAM API, and only then instructs Twilio to place the call if the number is not prohibited.
Can I call the DNC API from the browser or a TwiML bin? +
No. Keep the API key on the server. The public docs require a Bearer key and a server-side environment. Do not put the key in client code.
What fields can I rely on? +
Request: country and phones, plus a required Idempotency-Key header on every POST. Successful v1 body: prohibited_numbers_to_call, safe_numbers_to_call, invalid_numbers, summary, and scrub_record (the phone-free screening record). Persist scrub_record yourself; v1 does not keep it. See the OpenAPI contract and docs.dnclatam.com.
When should a Twilio shop buy? +
When outbound voice or messaging already hits +52, +54, or +57. From $500/month per country at 10,000 checks. Not a US TCPA or National DNC product.