CSV Upload
const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-organization-id': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({requests_file_name: '<string>', recharges_file_name: '<string>'})
};
fetch('https://api.dcycle.io/v1/logistics/upload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.dcycle.io/v1/logistics/upload"
payload = {
"requests_file_name": "<string>",
"recharges_file_name": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"x-organization-id": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)curl --request POST \
--url https://api.dcycle.io/v1/logistics/upload \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-organization-id: <x-organization-id>' \
--data '
{
"requests_file_name": "<string>",
"recharges_file_name": "<string>"
}
'{
"requests": {},
"requests.upload_url": "<string>",
"requests.file_name": "<string>",
"requests.file_id": "<string>",
"recharges": {}
}CSV Upload
Generate presigned URLs for bulk logistics CSV uploads
POST
/
v1
/
logistics
/
upload
CSV Upload
const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-organization-id': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({requests_file_name: '<string>', recharges_file_name: '<string>'})
};
fetch('https://api.dcycle.io/v1/logistics/upload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.dcycle.io/v1/logistics/upload"
payload = {
"requests_file_name": "<string>",
"recharges_file_name": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"x-organization-id": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)curl --request POST \
--url https://api.dcycle.io/v1/logistics/upload \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-organization-id: <x-organization-id>' \
--data '
{
"requests_file_name": "<string>",
"recharges_file_name": "<string>"
}
'{
"requests": {},
"requests.upload_url": "<string>",
"requests.file_name": "<string>",
"requests.file_id": "<string>",
"recharges": {}
}← Logistics API
Generate presigned S3 upload URLs for bulk importing logistics data via CSV. You can upload requests and/or recharges files in a single call — at least one file name must be provided.
Request
Headers
string
required
Your API key for authenticationExample:
sk_live_1234567890abcdefstring
required
Your organization UUIDExample:
a8315ef3-dd50-43f8-b7ce-d839e68d51faBody Parameters
string
Name of the requests CSV file to uploadExample:
routes-jan-2025.csvstring
Name of the recharges CSV file to uploadExample:
fuel-jan-2025.csvAt least one of
requests_file_name or recharges_file_name must be provided.Response
object | null
Presigned URL info for the requests file (null if not requested)
string
Presigned S3 URL to upload the requests CSV via PUT
string
File name as stored
string
UUID of the created file record
object | null
Presigned URL info for the recharges file (null if not requested)
Example
# Step 1: Get presigned URLs for both files
RESPONSE=$(curl -s -X POST "https://api.dcycle.io/v1/logistics/upload" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}" \
-H "Content-Type: application/json" \
-d '{
"requests_file_name": "routes-jan-2025.csv",
"recharges_file_name": "fuel-jan-2025.csv"
}')
# Step 2: Upload each file to its presigned URL
REQUESTS_URL=$(echo $RESPONSE | jq -r '.requests.upload_url')
RECHARGES_URL=$(echo $RESPONSE | jq -r '.recharges.upload_url')
curl -X PUT "$REQUESTS_URL" -H "Content-Type: text/csv" --data-binary @routes-jan-2025.csv
curl -X PUT "$RECHARGES_URL" -H "Content-Type: text/csv" --data-binary @fuel-jan-2025.csv
import requests
import os
headers = {
"x-api-key": os.getenv("DCYCLE_API_KEY"),
"x-organization-id": os.getenv("DCYCLE_ORG_ID"),
"Content-Type": "application/json",
}
# Step 1: Get presigned URLs
response = requests.post(
"https://api.dcycle.io/v1/logistics/upload",
headers=headers,
json={
"requests_file_name": "routes-jan-2025.csv",
"recharges_file_name": "fuel-jan-2025.csv",
},
)
result = response.json()
# Step 2: Upload files
if result["requests"]:
with open("routes-jan-2025.csv", "rb") as f:
requests.put(result["requests"]["upload_url"], data=f, headers={"Content-Type": "text/csv"})
print(f"Requests file ID: {result['requests']['file_id']}")
if result["recharges"]:
with open("fuel-jan-2025.csv", "rb") as f:
requests.put(result["recharges"]["upload_url"], data=f, headers={"Content-Type": "text/csv"})
print(f"Recharges file ID: {result['recharges']['file_id']}")
const axios = require('axios');
const fs = require('fs');
const headers = {
'x-api-key': process.env.DCYCLE_API_KEY,
'x-organization-id': process.env.DCYCLE_ORG_ID,
'Content-Type': 'application/json',
};
// Step 1: Get presigned URLs
const { data } = await axios.post('https://api.dcycle.io/v1/logistics/upload', {
requests_file_name: 'routes-jan-2025.csv',
recharges_file_name: 'fuel-jan-2025.csv',
}, { headers });
// Step 2: Upload files
if (data.requests) {
const csv = fs.readFileSync('routes-jan-2025.csv');
await axios.put(data.requests.upload_url, csv, { headers: { 'Content-Type': 'text/csv' } });
console.log(`Requests file ID: ${data.requests.file_id}`);
}
if (data.recharges) {
const csv = fs.readFileSync('fuel-jan-2025.csv');
await axios.put(data.recharges.upload_url, csv, { headers: { 'Content-Type': 'text/csv' } });
console.log(`Recharges file ID: ${data.recharges.file_id}`);
}
Successful Response
{
"requests": {
"upload_url": "https://s3.eu-west-1.amazonaws.com/dcycle-uploads/...",
"file_name": "routes-jan-2025.csv",
"file_id": "file-uuid-1",
"destination_file_key": "organizations/org-uuid/logistics/requests/file-uuid-1.csv",
"message": "Upload URL generated successfully"
},
"recharges": {
"upload_url": "https://s3.eu-west-1.amazonaws.com/dcycle-uploads/...",
"file_name": "fuel-jan-2025.csv",
"file_id": "file-uuid-2",
"destination_file_key": "organizations/org-uuid/logistics/recharges/file-uuid-2.csv",
"message": "Upload URL generated successfully"
}
}
Common Errors
401 Unauthorized
Cause: Missing or invalid API key{"detail": "Invalid API key for organization", "code": "INVALID_API_KEY"}
403 Forbidden
Cause: The authenticated user is not a member of the organization{"detail": "Logged User is not Member of Organization", "code": "LOGGED_USER_NOT_MEMBER"}
422 Unprocessable Entity
Cause: Neitherrequests_file_name nor recharges_file_name was provided
{ "detail": "At least one of requests_file_name or recharges_file_name must be provided." }
Related Endpoints
List Requests
Browse imported logistics requests
List Recharges
Browse imported fuel recharges
Was this page helpful?