Skip to main content
POST
/
passthrough
/
raw
Raw Passthrough
curl --request POST \
  --url https://api.withterminal.com/tsp/v1/passthrough/raw \
  --header 'Authorization: Bearer <token>' \
  --header 'Connection-Token: <connection-token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "method": "POST",
  "path": "/media/files/download",
  "body": "{\"fileId\":\"file_123\"}"
}
'
import requests

url = "https://api.withterminal.com/tsp/v1/passthrough/raw"

payload = {
"method": "POST",
"path": "/media/files/download",
"body": "{\"fileId\":\"file_123\"}"
}
headers = {
"Connection-Token": "<connection-token>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {
'Connection-Token': '<connection-token>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
method: 'POST',
path: '/media/files/download',
body: JSON.stringify('{"fileId":"file_123"}')
})
};

fetch('https://api.withterminal.com/tsp/v1/passthrough/raw', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.withterminal.com/tsp/v1/passthrough/raw",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'method' => 'POST',
'path' => '/media/files/download',
'body' => '{"fileId":"file_123"}'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Connection-Token: <connection-token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.withterminal.com/tsp/v1/passthrough/raw"

payload := strings.NewReader("{\n \"method\": \"POST\",\n \"path\": \"/media/files/download\",\n \"body\": \"{\\\"fileId\\\":\\\"file_123\\\"}\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Connection-Token", "<connection-token>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.withterminal.com/tsp/v1/passthrough/raw")
.header("Connection-Token", "<connection-token>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"POST\",\n \"path\": \"/media/files/download\",\n \"body\": \"{\\\"fileId\\\":\\\"file_123\\\"}\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.withterminal.com/tsp/v1/passthrough/raw")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Connection-Token"] = '<connection-token>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"POST\",\n \"path\": \"/media/files/download\",\n \"body\": \"{\\\"fileId\\\":\\\"file_123\\\"}\"\n}"

response = http.request(request)
puts response.read_body
"<string>"
{
"code": "bad_request",
"message": "Invalid request body",
"detail": [
{
"message": "'vehicleId' property must be a valid ulid",
"path": "{requestQuery}.vehicleId",
"suggestion": "Please ensure you submit a valid 'vehicleId' property",
"context": {}
}
]
}
{
"code": "unauthorized",
"message": "Unauthorized Request",
"detail": "Please ensure you have a valid API key"
}
{
"code": "forbidden",
"message": "Forbidden Request",
"detail": "Please ensure the connection token matches the resource you are attempting to access."
}
{
"code": "connection_disconnected",
"message": "Connection must be connected to perform this action",
"detail": []
}
{
"code": "too_many_requests",
"message": "Too Many Requests",
"retryAfter": 60,
"detail": "You have exceeded your rate limit. Please try again later."
}
{
"code": "internal_server_error",
"message": "Internal Server Error",
"detail": "Something went wrong"
}
{
"code": "not_implemented",
"message": "Not Implemented",
"detail": "This endpoint is not yet implemented"
}
{
"code": "bad_gateway",
"message": "Provider Unavailable",
"detail": "Error response received from provider with status 500"
}
{
"code": "gateway_timeout",
"message": "Gateway Timeout"
}
Use Raw Passthrough for provider endpoints that download inspection photos, documents, videos, or other non-JSON files. Response rules:
  • Provider success (2xx): the provider body is returned as raw bytes with the provider’s Content-Type and status.
  • Provider error (non-2xx): the response is HTTP 200 with a PassthroughOutput JSON envelope (statusCode, headers, response), matching /passthrough. Unsuccessful provider responses are therefore not surfaced as Terminal API errors; check the envelope’s statusCode for the provider status.
  • Terminal error: requests that fail before or around the provider call return a standard Terminal error status and JSON body.
For normal JSON API calls where you want Terminal to parse and wrap successful provider responses too, use /passthrough instead.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Connection-Token
string
required

The token returned when a user authenticated their account. This authorizes access to a specific account.

Pattern: ^con_tkn_\S+$
Example:

"con_tkn_22vUhkC6tgre4kwaYfUkCDA1rzn6eyb4"

Body

application/json
method
enum<string>
required

The method for the third-party request, such as GET or POST.

Available options:
GET,
POST,
PUT,
PATCH,
DELETE
Example:

"POST"

path
string
required

The path for the third-party request, such as /reports

Example:

"/reports"

headers
object

The headers to use for the request (Terminal will handle the connection's authorization headers)

body
string

The request body

Example:

"{\"reportId\":\"1234\"}"

Response

A successful provider response body, forwarded directly without the Terminal PassthroughOutput JSON envelope. The Content-Type reflects the provider's response (for example image/jpeg or application/pdf), not necessarily application/octet-stream.

Raw response bytes from the provider. The body is not a JSON object and is not base64 encoded for HTTP clients. This endpoint may also return HTTP 200 with a PassthroughOutput JSON envelope (see the endpoint description) when the provider itself responds with an error status.