Skip to content

Check a CSV before importing it

POST
/v1/items/imports/preview
curl --request POST \
--url 'https://api.threadkite.app/v1/items/imports/preview?type=product' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@file

Recognises Google Merchant Center, Google Vehicle Ads, Meta catalogue and Meta automotive feeds and the Threadkite template, validates every row and reports what an import would do. Nothing is saved.

type

Import as this item type whatever the columns look like

string
>= 1 characters <= 50 characters
Allowed values: product vehicle

Import as this item type whatever the columns look like

locationId

Put every item at this location

string format: uuid

Put every item at this location

Media typemultipart/form-data
object
file
required

CSV or TSV, up to 10 MB

string format: binary
Media typeapplication/json
object
format
required
string
Allowed values: google_merchant meta_catalogue threadkite meta_automotive google_vehicle_ads
formatLabel
required
string
itemType
required
string
itemTypeLabel
required
string
rows
required

Data rows in the file

number
valid
required

Rows that can be imported

number
invalid
required

Rows with problems; they are skipped

number
missingColumns
required

Required fields the file has no column for, with the column to add

Array<string>
errors
required

The first 100 problems

Array<object>
object
line
required

Line in the file (the header is line 1)

number
externalId
required
string
nullable
messages
required
Array<string>
toCreate
required

Valid rows that would add new items

number
toUpdate
required

Valid rows that would update items from an earlier import

number
sample
required

The first few valid rows

Array<object>
object
line
required
number
externalId
required
string
title
required
string
status
required
string
price
required
One of:
object
amountMinor
required

Amount in minor units (pence, cents)

number
currency
required

ISO 4217

string
billing
required

How the price is charged: one_off (once), monthly (every month) or annual (every year)

string
Allowed values: one_off monthly annual

Example

{
"format": "google_merchant",
"formatLabel": "Google Merchant Center product feed",
"itemType": "product",
"itemTypeLabel": "products",
"missingColumns": [
"Price (price)"
],
"errors": [
{
"line": 4,
"messages": [
"Enter the make"
]
}
],
"sample": [
{
"price": {
"amountMinor": 1299500,
"currency": "GBP"
},
"billing": "one_off"
}
]
}
Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}

Missing or invalid API key

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}

The organisation is on the Free plan (code upgrade_required)

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
feature
required

The feature that needs Pro

string
nullable
Allowed values: extraSeats connections aiAssistant aiReplies rules fullReports api inboxes bulkMessages videoMessages
upgradePath
required

Where to upgrade or pay, in the web app

string

Example

{
"statusCode": 402,
"code": "upgrade_required",
"message": "Connections are part of Pro. Upgrade to connect texts, calls and more.",
"feature": "extraSeats",
"upgradePath": "/settings/billing"
}

The key does not have the scope (or the person the permission)

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}
Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}

Rate limit reached

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
retryAfter
required

Seconds until another request will be accepted

number

Example

{
"statusCode": 429,
"code": "rate_limited",
"message": "Too many requests. Each key can make 120 requests a minute; try again in 12 seconds.",
"retryAfter": 12
}