REST File API
Automate CSV submissions via REST File API
The File API lets you accept spreadsheet files programmatically. It is an alternative to the users uploading the files manually, via the Csvbox importer. Files submitted via the REST File API will then be pushed to the data destination as set up in the Csvbox dashboard.
Simple File API Request
curl --location --request POST 'https://api.csvbox.io/1.1/file' \
--header 'x-csvbox-api-key: CSBxRLHgIZv3bqMlrJiVKXhKwtcHSv' \
--header 'Content-Type: application/json' \
--data-raw '{
"import": {
"public_file_url": "https: //some-domain.com/file/3434as.csv",
"sheet_license_key": "jhkjsahjkhkjhkjhkjasdasd",
"user": {
"user_id": "1a2b3c4d5e6f",
},
"options": {
"has_header": 1
}
}'
After the data is pushed to the destination, the import complete webhook can be triggered as configured in the sheet settings.
The spreadsheet data submitted via File API will not be validated based on the rules configured in the sheet settings. The importer will attempt to push the data directly to the destination in the raw form.
Authentication
All REST File API queries require a valid API key. You can find the API key on the Accounts page in the Csvbox dashboard.
Include your API key as a x-csvbox-api-key
header on all API queries.
Endpoint
Submits a spreadsheet file
POST
https://api.csvbox.io/1.1/file
Headers
x-csvbox-api-key*
String
API Key
content-type*
String
application/json
Request Body
import.public_file_url*
String
The public URL of the spreadsheet that is to be submitted.
import.file_sheet_name
String
Worksheet name in case of a file having multiple tabs.
import.sheet_license_key*
String
Sheet license key
import*
Object
Import file data
import.user
Object
import.options
Object
import.dynamic_columns
Object
import.auto_map
Boolean
Enable automatic column mapping in cases where exact match is not found. auto_map default value is false.
The columns in the file should be arranged in the same order as configured in the sheet template and the column names should match exactly. If you want the importer to auto-map the columns, configure auto_map to true.
HTTP/1.1 200 OK
{
"import_id": 79418895,
"license_key":"jhkjsahjkhkjhkjhkjasdasd",
"sheet_id": 575,
"sheet_name": "Products Import",
"destination_type": "webhook",
"import_starttime": 87987897897,
"custom_fields": {
"user_id": "1a2b3c4d5e6f",
"team_id": "sales2",
"permissionLevel": "admin"
},
"options": {
"max_rows": 150,
"has_header": 1
},
"dynamic_olumns": [
{
"column_name": "qualification",
"display_label": "Highest Qualification",
"info_hint": "What is your highest educational degree",
"matching_keywords": "degree, education",
"type": "text",
"validators": {
"min_length": 2,
"max_length": 50
},
"required": true
},
{
"column_name": "experience",
"display_label": "Work Experience",
"info_hint": "Years of work experience",
"matching_keywords": "",
"type": "number",
"validators": {
"min_value": 0,
"max_value": 100
},
"required": false
}
]
}
Example Request
curl --location --request POST 'https://api.csvbox.io/1.1/file' \
--header 'x-csvbox-api-key: CSBxRLHgIZv3bqMlrJiVKXhKwtcHSv' \
--header 'Content-Type: application/json' \
--data-raw '{
"import": {
"public_file_url": "https: //some-domain.com/admin/download-csv/UXOR2MphpEu2sSAIISpY7AKmOIzAKygLNy8eviEr",
"sheet_license_key": "jhkjsahjkhkjhkjhkjasdasd",
"user": {
"user_id": "1a2b3c4d5e6f",
"team_id": "sales2",
"permissionLevel": "admin"
},
"options": {
"max_rows": 150,
"has_header": 1
},
"dynamic_columns": [
{
"column_name": "qualification",
"display_label": "HighestQualification",
"info_hint": "Whatisyourhighesteducationaldegree",
"matching_keywords": "degree, education",
"type": "text",
"validators": {
"min_length": 2,
"max_length": 50
},
"required": true
},
{
"column_name": "experience",
"display_label": "WorkExperience",
"info_hint": "Yearsofworkexperience",
"matching_keywords": "",
"type": "number",
"validators": {
"min_value": 0,
"max_value": 100
},
"required": false
}
]
}'
Direct File Upload
As an alternative to providing the public file URL to the FILE API, you also have the option to upload the file contents directly. Instead of using the import.public_file_url use the following body param:
Request Body
import.file*
String
The contents of the file to be imported.
Example Request
curl --location --request POST 'https://api.csvbox.io/1.1/file' \
--header 'x-csvbox-api-key: CSBxRLHgIZv3bqMlrJiVKXhKwtcHSv' \
--header 'Content-Type: multipart/form-data' \
-F 'import={
"sheet_license_key": "jhkjsahjkhkjhkjhkjasdasd",
"user": {
"user_id": "1a2b3c4d5e6f",
},
"options": {
"max_rows": 150,
"has_header": 1
}
}' \
-F 'file=@/path/to/your/file.csv'
Rate limits
The REST Admin API supports a limit of 30 requests per minute. This allotment replenishes at a rate of 2 requests per second.
Past the limit, the API will return a 429 Too Many Requests
error.
All REST API responses include the x-csvbox-file-api-call-limit
header, which shows how many requests the client has made, and the total number allowed per minute.
A 429
response will also include a retry-after
header with the number of seconds to wait until retrying your query.
Status and error codes
All API queries return HTTP status codes that can tell you more about the response.
401 Unauthorized
The client doesn’t have the correct authentication credentials.
HTTP/1.1 401 Unauthorized
{
"errors": "[API] Invalid API key or access token."
}
402 Import Limit Reached
The monthly import limit based on the account plan is reached. You can upgrade the plan to increase the import limit.
HTTP/1.1 402 Import Limit Reached
{
"errors": "The account has exceeded the import limit."
}
403 Forbidden
The server is refusing to respond. This is typically caused if File API is disabled.
HTTP/1.1 403 Access Denied
{
"errors": "User does not have access."
}
404 Not Found
The referenced sheet was not found.
HTTP/1.1 404 Not Found
{
"errors": "Sheet not found."
}
422 Unprocessable File
The request body contains file errors. This is typically caused by incorrect file path, invalid file permissions, incorrect file format, corrupt file, file size too large, etc.
HTTP/1.1 422 Unprocessable File
{
"errors": "Invalid file format."
}
429 Too Many Requests
The client has exceeded the rate limit.
HTTP/1.1 429 Too Many Requests
{
"errors": "API Rate limit reached. Reduce request rates to resume uninterrupted service."
}
5xx Errors
An internal error occurred in Csvbox. Report to our team for such errors.
HTTP/1.1 500 Internal Server Error
{
"errors": "An unexpected error occurred."
}
Options
Here is the list of additional configuration options available with the File API.
max_rows
Type
Integer
Default
Null
Description
The maximum number of rows to import.
has_header
Type
Boolean
Default
0
Description
Specify whether the file contains a header row. Acceptable values are:
0 (no header)
1 (has a header row)
Last updated
Was this helpful?