Subscribers
Get Subscriber Import
Get progress and row outcomes for a queued subscriber import
GET
/
api
/
v1
/
subscribers
/
imports
/
:importId
Get Subscriber Import
curl --request GET \
--url https://api.sequenzy.com/api/v1/subscribers/imports/:importId \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/subscribers/imports/:importId"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/subscribers/imports/:importId', 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.sequenzy.com/api/v1/subscribers/imports/:importId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/subscribers/imports/:importId"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sequenzy.com/api/v1/subscribers/imports/:importId")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/subscribers/imports/:importId")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"import": {
"id": "import_abc123",
"batchId": "batch_abc123",
"fileName": "copper-export.csv",
"status": "completed",
"totalRows": 23,
"emailCount": 21,
"duplicateRows": 1,
"addedCount": 21,
"updatedCount": 0,
"skippedCount": 2,
"failedCount": 0,
"processedCount": 23,
"totalChunks": 1,
"completedChunks": 1,
"failedChunks": 0,
"skippedReasons": { "duplicate_csv_row": 1, "missing_identity": 1 },
"failedReasons": {},
"failedChunkReasons": {}
}
}
{ "success": false, "error": "Unauthorized" }
{ "success": false, "error": "Subscriber import not found" }
Returns a company-scoped import by its import ID or batch ID. The API key needs
subscribers:read.
Status completed means row processing has finished. Custom-attribute
updates sync separately, so attribute-based segment counts may still show
earlier values for roughly 30–35 seconds, or longer when background processing
is busy. Allow that sync to finish before rechecking
Get Segment Count.
string
required
Import ID or batch ID returned by the create endpoint.
curl "https://api.sequenzy.com/api/v1/subscribers/imports/import_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
Reconciling an import
Every row an import excludes is explained:skippedReasons sums to
skippedCount and failedReasons sums to failedCount. On a completed import
addedCount + updatedCount + skippedCount + failedCount equals totalRows, so
you can prove nothing went missing without inspecting individual contacts.
Common values in skippedReasons:
| Reason | Meaning |
|---|---|
duplicate_csv_row | Another submitted row carried the same email, phone, or external ID |
duplicate_strategy_skip | The contact already existed and duplicateStrategy was skip |
merge_no_changes | The contact already existed and the submitted values matched |
subscriber_action_returned_existing | The contact already existed and nothing was written |
invalid_domain | The email domain does not accept mail |
blocked_email | The address is suppressed after prior delivery failures |
invalid_phone | A phone-only row whose number could not be normalized |
missing_identity | The row had no usable email or phone number |
canceled | The import was canceled before the row was processed |
unreported_skip | A skipped row could not be assigned a more specific reason |
{
"success": true,
"import": {
"id": "import_abc123",
"batchId": "batch_abc123",
"fileName": "copper-export.csv",
"status": "completed",
"totalRows": 23,
"emailCount": 21,
"duplicateRows": 1,
"addedCount": 21,
"updatedCount": 0,
"skippedCount": 2,
"failedCount": 0,
"processedCount": 23,
"totalChunks": 1,
"completedChunks": 1,
"failedChunks": 0,
"skippedReasons": { "duplicate_csv_row": 1, "missing_identity": 1 },
"failedReasons": {},
"failedChunkReasons": {}
}
}
{ "success": false, "error": "Unauthorized" }
{ "success": false, "error": "Subscriber import not found" }
⌘I
Get Subscriber Import
curl --request GET \
--url https://api.sequenzy.com/api/v1/subscribers/imports/:importId \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/subscribers/imports/:importId"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/subscribers/imports/:importId', 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.sequenzy.com/api/v1/subscribers/imports/:importId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/subscribers/imports/:importId"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sequenzy.com/api/v1/subscribers/imports/:importId")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/subscribers/imports/:importId")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"import": {
"id": "import_abc123",
"batchId": "batch_abc123",
"fileName": "copper-export.csv",
"status": "completed",
"totalRows": 23,
"emailCount": 21,
"duplicateRows": 1,
"addedCount": 21,
"updatedCount": 0,
"skippedCount": 2,
"failedCount": 0,
"processedCount": 23,
"totalChunks": 1,
"completedChunks": 1,
"failedChunks": 0,
"skippedReasons": { "duplicate_csv_row": 1, "missing_identity": 1 },
"failedReasons": {},
"failedChunkReasons": {}
}
}
{ "success": false, "error": "Unauthorized" }
{ "success": false, "error": "Subscriber import not found" }