Send or resend secure CFPB EcoLetters
curl --request POST \
--url https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"with_qr_code": true
}
'import requests
url = "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters"
payload = { "with_qr_code": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({with_qr_code: true})
};
fetch('https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'with_qr_code' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters"
payload := strings.NewReader("{\n \"with_qr_code\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"with_qr_code\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"with_qr_code\": true\n}"
response = http.request(request)
puts response.read_body{
"message": "All secure EcoLetters are being processed. You will receive a notification when complete.",
"data": {
"id": 42,
"filename": "cfpb-add-accounts.csv",
"active_consumers_count": 10,
"cfpb": {
"last_action_type": "eco_letter_send",
"last_action_label": "EcoLetter Sent",
"last_action_with_qr": true,
"last_action_cost": "5.00"
}
}
}{
"message": "<string>"
}{
"message": "An active membership is required."
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Send or resend secure CFPB EcoLetters
Process the secure EcoLetter payment, record the YouNegotiate EcoLetter transaction, queue CFPB EcoLetters for active consumers, and update CFPB Communication History. The same endpoint backs Send Secure EcoLetters from pending rows and Resend Secure EcoLetters from history rows.
POST
/
communications
/
cfpb-validation-letter
/
{fileUploadHistory}
/
secure-ecoletters
Send or resend secure CFPB EcoLetters
curl --request POST \
--url https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"with_qr_code": true
}
'import requests
url = "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters"
payload = { "with_qr_code": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({with_qr_code: true})
};
fetch('https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'with_qr_code' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters"
payload := strings.NewReader("{\n \"with_qr_code\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"with_qr_code\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.creditor.younegotiate.com/communications/cfpb-validation-letter/{fileUploadHistory}/secure-ecoletters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"with_qr_code\": true\n}"
response = http.request(request)
puts response.read_body{
"message": "All secure EcoLetters are being processed. You will receive a notification when complete.",
"data": {
"id": 42,
"filename": "cfpb-add-accounts.csv",
"active_consumers_count": 10,
"cfpb": {
"last_action_type": "eco_letter_send",
"last_action_label": "EcoLetter Sent",
"last_action_with_qr": true,
"last_action_cost": "5.00"
}
}
}{
"message": "<string>"
}{
"message": "An active membership is required."
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
CFPB import file upload history ID.
Body
application/json
Whether the generated CFPB validation letter should include the personalized QR code.
Last modified on July 20, 2026
Was this page helpful?
⌘I

