curl --request POST \
--url https://core-service.prod.brudcast.com/api/v1/user/contact-imports \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"uploadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fieldMappings": [
{
"csvHeader": "<string>",
"brudcastField": "<string>"
}
],
"consentConfirmed": true,
"allowPartialUpload": true,
"listName": "<string>",
"tags": [
"<string>"
]
}
'import requests
url = "https://core-service.prod.brudcast.com/api/v1/user/contact-imports"
payload = {
"uploadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fieldMappings": [
{
"csvHeader": "<string>",
"brudcastField": "<string>"
}
],
"consentConfirmed": True,
"allowPartialUpload": True,
"listName": "<string>",
"tags": ["<string>"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
uploadId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
fieldMappings: [{csvHeader: '<string>', brudcastField: '<string>'}],
consentConfirmed: true,
allowPartialUpload: true,
listName: '<string>',
tags: ['<string>']
})
};
fetch('https://core-service.prod.brudcast.com/api/v1/user/contact-imports', 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://core-service.prod.brudcast.com/api/v1/user/contact-imports",
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([
'uploadId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'fieldMappings' => [
[
'csvHeader' => '<string>',
'brudcastField' => '<string>'
]
],
'consentConfirmed' => true,
'allowPartialUpload' => true,
'listName' => '<string>',
'tags' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://core-service.prod.brudcast.com/api/v1/user/contact-imports"
payload := strings.NewReader("{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://core-service.prod.brudcast.com/api/v1/user/contact-imports")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core-service.prod.brudcast.com/api/v1/user/contact-imports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"import": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "subscribers.csv",
"filePath": "<string>",
"status": "uploaded",
"totalRows": 123,
"processedRows": 123,
"successCount": 123,
"errorCount": 123,
"newCount": 123,
"duplicateCount": 123,
"duplicateHandling": "skip",
"allowPartialUpload": true,
"listName": "<string>",
"tags": [
"<string>"
],
"consentConfirmed": true,
"fieldMappings": [
{
"csvHeader": "Email Address",
"brudcastField": "email"
}
],
"errorsFilePath": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}
}
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "The payload is invalid",
"code": "E_VALIDATION_ERROR",
"errors": [
{
"field": "emailAddress",
"rule": "email",
"message": "The emailAddress field must be a valid email address"
}
]
}{
"success": false,
"message": "Too many requests",
"code": "E_TOO_MANY_REQUESTS",
"retryAfter": 60
}Start a contact import
Commits an uploaded draft with the chosen mappings and queues it for processing. The 201 confirms only that the import was queued: rows are written by a background worker, so poll the import by id to follow status and the row counters. consentConfirmed must be true, and a payload without it is refused with a 400 rather than a validation error. Requires the contacts:write scope.
curl --request POST \
--url https://core-service.prod.brudcast.com/api/v1/user/contact-imports \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"uploadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fieldMappings": [
{
"csvHeader": "<string>",
"brudcastField": "<string>"
}
],
"consentConfirmed": true,
"allowPartialUpload": true,
"listName": "<string>",
"tags": [
"<string>"
]
}
'import requests
url = "https://core-service.prod.brudcast.com/api/v1/user/contact-imports"
payload = {
"uploadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fieldMappings": [
{
"csvHeader": "<string>",
"brudcastField": "<string>"
}
],
"consentConfirmed": True,
"allowPartialUpload": True,
"listName": "<string>",
"tags": ["<string>"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
uploadId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
fieldMappings: [{csvHeader: '<string>', brudcastField: '<string>'}],
consentConfirmed: true,
allowPartialUpload: true,
listName: '<string>',
tags: ['<string>']
})
};
fetch('https://core-service.prod.brudcast.com/api/v1/user/contact-imports', 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://core-service.prod.brudcast.com/api/v1/user/contact-imports",
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([
'uploadId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'fieldMappings' => [
[
'csvHeader' => '<string>',
'brudcastField' => '<string>'
]
],
'consentConfirmed' => true,
'allowPartialUpload' => true,
'listName' => '<string>',
'tags' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://core-service.prod.brudcast.com/api/v1/user/contact-imports"
payload := strings.NewReader("{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://core-service.prod.brudcast.com/api/v1/user/contact-imports")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core-service.prod.brudcast.com/api/v1/user/contact-imports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"uploadId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fieldMappings\": [\n {\n \"csvHeader\": \"<string>\",\n \"brudcastField\": \"<string>\"\n }\n ],\n \"consentConfirmed\": true,\n \"allowPartialUpload\": true,\n \"listName\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"import": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "subscribers.csv",
"filePath": "<string>",
"status": "uploaded",
"totalRows": 123,
"processedRows": 123,
"successCount": 123,
"errorCount": 123,
"newCount": 123,
"duplicateCount": 123,
"duplicateHandling": "skip",
"allowPartialUpload": true,
"listName": "<string>",
"tags": [
"<string>"
],
"consentConfirmed": true,
"fieldMappings": [
{
"csvHeader": "Email Address",
"brudcastField": "email"
}
],
"errorsFilePath": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}
}
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "Resource not found",
"code": "E_ROW_NOT_FOUND"
}{
"success": false,
"message": "The payload is invalid",
"code": "E_VALIDATION_ERROR",
"errors": [
{
"field": "emailAddress",
"rule": "email",
"message": "The emailAddress field must be a valid email address"
}
]
}{
"success": false,
"message": "Too many requests",
"code": "E_TOO_MANY_REQUESTS",
"retryAfter": 60
}Authorizations
An organization API key, prefixed bk_live_. Takes precedence over Authorization when both are sent. The key is bound to one organization, and the scopes it was issued with are enforced per endpoint.
Headers
Required when authenticating with an access token. Optional with an API key, whose own organization binding is authoritative; a value contradicting it is refused with 403.
Body
1Show child attributes
Show child attributes
skip, update, create_new 1 - 2551