API Reference
Convert files programmatically. All endpoints accept and return JSON or binary streams.
Base URL: https://convertdata.io
Authentication
Anonymous conversions are allowed up to 5 MB and 10 per day. For higher limits, authenticate with a Pro API key via the standard Bearer scheme.
Authorization: Bearer sk_live_your_api_key_hereAPI keys are available on the Pro plan. Create and revoke keys from your account page.
Convert a file
POST/v1/convert
Upload a file and receive the converted result as a binary stream. The input format is auto-detected from the filename and file contents.
Form fields
| file | file | The file to convert (multipart/form-data). |
| output_format | string | Target format: csv · json · xlsx · parquet · sql · sqlite |
| options | JSON string | Optional conversion options (see Options below). |
Examples
# CSV → JSON (anonymous)
curl -X POST https://convertdata.io/v1/convert \
-F "file=@data.csv" \
-F "output_format=json" \
-o output.json
# JSON → XLSX with multi-sheet (Pro)
curl -X POST https://convertdata.io/v1/convert \
-H "Authorization: Bearer sk_live_..." \
-F "file=@data.json" \
-F "output_format=xlsx" \
-F 'options={"multi_sheet": true}' \
-o output.xlsx
# CSV → JSON with column selection and rename
curl -X POST https://convertdata.io/v1/convert \
-H "Authorization: Bearer sk_live_..." \
-F "file=@employees.csv" \
-F "output_format=json" \
-F 'options={"selected_columns":["name","dept"],"column_renames":{"dept":"department"}}' \
-o output.jsonConvert from a URL
POST/v1/convert/url
Fetch a public URL and convert its content. Useful in automation workflows when the source file is already hosted somewhere (public API, S3 presigned URL, Google Sheets CSV export link).
# JSON body
{
"url": "https://example.com/data.csv",
"output_format": "json",
"options": {}
}
# curl example
curl -X POST https://convertdata.io/v1/convert/url \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_live_..." \
-d '{"url":"https://example.com/report.csv","output_format":"json"}' \
-o output.jsonPrivate IPs (192.168.x.x, 127.x.x.x, etc.) and non-http(s) schemes are rejected.
Inspect schema
POST/v1/convert/schema POST/v1/convert/schema/url
Returns column names, types, and a 5-row sample without performing a full conversion. Useful for previewing structure before deciding which columns to select.
# From file
curl -X POST https://convertdata.io/v1/convert/schema \
-F "file=@data.csv"
# From URL
curl -X POST https://convertdata.io/v1/convert/schema/url \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/data.csv"}'
# Response
{
"columns": [
{"name": "id", "dtype": "integer"},
{"name": "name", "dtype": "string"},
{"name": "score","dtype": "float"}
],
"sample": [
{"id": 1, "name": "Alice", "score": 9.5}
]
}Options reference
Pass as a JSON string in the options form field, or as the options key in the URL-input JSON body.
| Option | Type | Description |
|---|---|---|
| delimiter | string | CSV: column separator. Auto-detected if omitted (e.g. ";" for semicolon). |
| encoding | string | CSV input encoding (e.g. "cp1250", "iso-8859-1"). Defaults to UTF-8. |
| has_header | boolean | CSV: whether the first row is a header. Default true. |
| sheet | string | int | XLSX: sheet name or 1-based index to read. Default: first sheet. |
| ndjson | boolean | Treat JSON input/output as newline-delimited (one object per line). |
| flatten_arrays | boolean | JSON → CSV/XLSX: explode arrays of objects to rows. Default true. |
| multi_sheet | boolean | JSON → XLSX: write each array field to its own sheet. Default false. |
| sql_table_name | string | SQL/SQLite output: table name. Defaults to the input filename stem. |
| selected_columns | string[] | Columns to include in output, in order. Omit to include all. |
| column_renames | {old: new} | Map of original column name → output column name. |
Rate limits & quotas
| Endpoint | Rate limit | Quota |
|---|---|---|
| /v1/convert, /v1/convert/url | 30 / min | Anonymous: 10 conversions/day · 5 MB per file. Pro: unlimited · 100 MB per file. |
| /v1/convert/schema | 30 / min | No daily quota. Same file-size limit as conversion. |
| /v1/auth/login, /signup | 5 / min | Brute-force protection. |
| All other /v1/* routes | 120 / min |
Exceeded limits return 429 Too Many Requests. Quota exceeded returns 429 with code: "quota_exceeded".
Make.com integration
Use the built-in HTTP module to call DataFlow Convert from any Make scenario.
Convert a file from a URL
Module: HTTP → Make a request
URL: https://convertdata.io/v1/convert/url
Method: POST
Headers:
Authorization: Bearer sk_live_...
Content-Type: application/json
Body (raw JSON):
{
"url": "{{1.download_url}}",
"output_format": "json"
}
Parse response: YesUpload a file from a previous module
Module: HTTP → Make a request
URL: https://convertdata.io/v1/convert
Method: POST
Headers:
Authorization: Bearer sk_live_...
Body type: multipart/form-data
Fields:
file → {{1.data}} (map the binary from previous module)
output_format → jsonn8n integration
Use an HTTP Request node in any n8n workflow.
Convert from a URL
Node: HTTP Request
Method: POST
URL: https://convertdata.io/v1/convert/url
Authentication: Generic Credential Type
Credential type: HTTP Header Auth
Name: Authorization
Value: Bearer sk_live_...
Body content type: JSON
Body:
{
"url": "{{ $json.file_url }}",
"output_format": "csv"
}Upload a binary file
Node: HTTP Request
Method: POST
URL: https://convertdata.io/v1/convert
Authentication: (same as above)
Body content type: Form Data (multipart)
Fields:
file → (binary input from previous node)
output_format → jsonError format
All errors return JSON with a consistent shape:
{
"error": {
"code": "conversion_error",
"message": "Failed to parse JSON: ..."
}
}| invalid_file | 400 | Unsupported or missing filename. |
| unsupported_format | 415 | Cannot detect input format. |
| file_too_large | 413 | File exceeds the plan limit. |
| conversion_error | 422 | Parse or write error (e.g. malformed CSV, unsupported nesting). |
| auth_required | 401 | Missing or invalid Bearer token / API key. |
| plan_required | 403 | Feature requires Pro plan. |
| quota_exceeded | 429 | Daily conversion quota reached. |
| tool_error | 422 | JSON repair or extract path error. |