Skip to main content

Upload a PDF and import with AI (JavaScript)

This guide shows how to upload a PDF to IMPARGO storage and trigger an AI-based import to create a transport order. The flow has three steps:

  1. Get a signed upload URL via GraphQL
  2. Upload the file to the signed URL
  3. Trigger the AI import with the uploaded file

Prerequisites

  • Your IMPARGO API token in the authorization header
  • GraphQL endpoint: https://backend.impargo.eu/
  • JavaScript runtime: Node.js 18+ (global fetch)

1) Get a signed upload URL

Use this GraphQL operation.

query GetSignedUrl($filename: String!, $setContentDisposition: Boolean) {
getSignedUrl(filename: $filename, setContentDisposition: $setContentDisposition)
}


async function getSignedUrl(token, fileName) {
const res = await fetch('https://backend.impargo.eu/', {
method: 'POST',
headers: {
authorization: token,
'content-type': 'application/json',
},
body: JSON.stringify([
{
operationName: 'GetSignedUrl',
variables: {
filename: fileName,
setContentDisposition: true,
},
query: `query GetSignedUrl($filename: String!, $setContentDisposition: Boolean) {
getSignedUrl(filename: $filename, setContentDisposition: $setContentDisposition)
}`,
},
]),
})
const data = await res.json()
const signedUrl = data[0]?.data?.getSignedUrl
return signedUrl
}

[
{
"data": {
"getSignedUrl": "https://impargo-gmbh.s3-accelerate.amazonaws.com/Transport.pdf?X-Amz-..."
}
}
]

2) Upload the file to the signed URL

Use Node 18+ global fetch to PUT the file to the S3 signed URL.

async function uploadToSignedUrl(signedUrl, file) {
const body = Buffer.isBuffer(file.descriptor)
? file.descriptor
: file.descriptor instanceof ArrayBuffer
? Buffer.from(file.descriptor)
: file.descriptor

await fetch(signedUrl, {
method: 'PUT',
headers: {
'Content-Type': file.contentType,
'Content-Length': file.size,
},
body,
})

return signedUrl.split('?')[0]
}

3) Trigger the AI import

Call the mutation with an OrderFilesInput describing the uploaded file. Default visibility is internal if you omit visibility.

mutation ImportOrderFromFile($file: OrderFilesInput!) {
importOrderFromFile(file: $file) {
_id
order {
reference
route {
distance
time
}
}
importOrderFromFileMetadata {
inputFileUrl
}
}
}


async function importOrderFromFile(token, uploadedUrl, file) {
const variables = {
file: {
url: uploadedUrl,
name: file.name,
size: file.size,
type: 'ATTACHMENT_UPLOAD',
contentType: file.contentType,
},
}

const res = await fetch('https://backend.impargo.eu/', {
method: 'POST',
headers: {
authorization: token,
'content-type': 'application/json',
},
body: JSON.stringify([
{
operationName: 'ImportOrderFromFile',
variables,
query: `mutation ImportOrderFromFile($file: OrderFilesInput!) {
importOrderFromFile(file: $file) {
_id
order {
reference
route {
distance
time
}
}
importOrderFromFileMetadata {
inputFileUrl
}
}
}`,
},
]),
})

const data = await res.json()
return data[0]?.data?.importOrderFromFile
}

[
{
"data": {
"importOrderFromFile": {
"_id": "6710c7...",
"order": {
"reference": "INV-2025-123",
"route": {
"distance": 534120,
"time": 22680
}
},
"importOrderFromFileMetadata": {
"inputFileUrl": "https://impargo-gmbh.s3-accelerate.amazonaws.com/Transport.pdf"
}
}
}
}
]