This endpoint allows a CSV upload containing up to one million contacts or 5GB of data, whichever is smaller. At least one identifier is required for a successful import.
Imports take place asynchronously: the endpoint returns a URL (upload_uri
) and HTTP headers (upload_headers
) which can subsequently be used to PUT
a file of contacts to be imported into our system.
Uploaded CSV files may also be gzip-compressed.
In either case, you must include the field file_type
with the value csv
in your request body.
The field_mappings
parameter is a respective list of field definition IDs to map the uploaded CSV columns to. It allows you to use CSVs where one or more columns are skipped (null
) or remapped to the contact field.
For example, if field_mappings
is set to [null, "w1", "_rf1"]
, this means skip column 0, map column 1 to the custom field with the ID w1
, and map column 2 to the reserved field with the ID _rf1
. See the "Get All Field Definitions" endpoint to fetch your custom and reserved field IDs to use with field_mappings
.
Once you receive the response body you can then initiate a second API call where you use the supplied URL and HTTP header to upload your file. For example:
curl --upload-file "file/path.csv" "URL_GIVEN" -H "HEADER_GIVEN"
If you would like to monitor the status of your import job, use the job_id
and the "Import Contacts Status" endpoint.
Twilio SendGrid recommends exporting your contacts regularly as a backup to avoid issues or lost data.
Bearer <<YOUR_API_KEY_HERE>>
application/json
All contacts will be added to each of the specified lists.
Upload file type.
csv
Import file header to reserved/custom field mapping.
The ID of the import job.
The URI to PUT the upload file to.
A list of headers that must be included in PUT request.
1const client = require('@sendgrid/client');2client.setApiKey(process.env.SENDGRID_API_KEY);34const data = {5"file_type": "csv",6"field_mappings": [7"e1_T"8]9};1011const request = {12url: `/v3/marketing/contacts/imports`,13method: 'PUT',14body: data15}1617client.request(request)18.then(([response, body]) => {19console.log(response.statusCode);20console.log(response.body);21})22.catch(error => {23console.error(error);24});