Appearance
List contact imports
Every import your team has run, newest first.
http
GET /v1/contacts/importsRequires a Full access API key.
Query parameters
| Parameter | Type | Description |
|---|---|---|
limit | number | How many to return. Default 20, min 1, max 100. |
after | string | Return imports after this id. Cannot be combined with before. |
before | string | Return imports before this id. Cannot be combined with after. |
status | string | Only imports with this status — queued, in_progress, completed or failed. |
Example
bash
# imports still in flight
curl "https://api.sendgrail.com/v1/contacts/imports?status=in_progress" \
-H "Authorization: Bearer $SENDGRAIL_API_KEY"js
const res = await fetch(
'https://api.sendgrail.com/v1/contacts/imports?status=completed',
{ headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` } },
);
const { data, has_more } = await res.json();Response
json
{
"object": "list",
"has_more": false,
"data": [
{
"object": "contact_import",
"id": "479e3145-dd38-476b-932c-529ceb705947",
"status": "completed",
"created_at": "2026-05-15T18:32:37+00:00",
"completed_at": "2026-05-15T18:33:42+00:00",
"counts": {
"total": 1200,
"created": 800,
"updated": 300,
"skipped": 75,
"failed": 25
}
}
]
}Each row is the full import object — status and counts included, so a dashboard can render the list without a request per row.