Introduction
Packflow REST API
This documentation aims to provide all the information you need to work with our API.
Create your Auth Key (API Key) in your account
Go to https://app.packflow.se/accounts#apikeys and add a new key.
The most common use case for the Packflow API is to book a shipment using the POST /shipments/book endpoint.
This endpoint allows you to create a order and shipment and receive a shipping label in a single request.
You can also handle documents (download, print, email) using the Documents endpoints.
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by visiting your dashboard and clicking Generate API token.
Documents
APIs for getting documents like labels, delivery notes, etc.
Download document
requires authentication
Returns a temporary url for the requested document type for given shipment ids. If more than one shipment id is given, the documents will be merged into one pdf. The url is a signed url that expires after 10 minutes.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/document/download/label/0527cbbe-d1e9-454d-8770-ce66da5f8d1a,185dfc35-5644-46d7-9fba-f0264b7666a5';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/document/download/label/0527cbbe-d1e9-454d-8770-ce66da5f8d1a,185dfc35-5644-46d7-9fba-f0264b7666a5" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/document/download/label/0527cbbe-d1e9-454d-8770-ce66da5f8d1a,185dfc35-5644-46d7-9fba-f0264b7666a5"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/document/download/label/0527cbbe-d1e9-454d-8770-ce66da5f8d1a,185dfc35-5644-46d7-9fba-f0264b7666a5'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"message": "success",
"url": "https://.../label_xxx.pdf"
}
Example response (400):
{
"message": "failed",
"reason": "No file"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
url
string
Url to document.
Print document
requires authentication
Sends document to printer using Printnode and the printer ID configured in settings.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/document/print/label';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'ids' => [
'0527cbbe-d1e9-454d-8770-ce66da5f8d1a',
'185dfc35-5644-46d7-9fba-f0264b7666a5',
],
'label_printer_id' => 123,
'document_printer_id' => 124,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/document/print/label" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"ids\": [
\"0527cbbe-d1e9-454d-8770-ce66da5f8d1a\",
\"185dfc35-5644-46d7-9fba-f0264b7666a5\"
],
\"label_printer_id\": 123,
\"document_printer_id\": 124
}"
const url = new URL(
"https://app.packflow.se/api/v1/document/print/label"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ids": [
"0527cbbe-d1e9-454d-8770-ce66da5f8d1a",
"185dfc35-5644-46d7-9fba-f0264b7666a5"
],
"label_printer_id": 123,
"document_printer_id": 124
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/document/print/label'
payload = {
"ids": [
"0527cbbe-d1e9-454d-8770-ce66da5f8d1a",
"185dfc35-5644-46d7-9fba-f0264b7666a5"
],
"label_printer_id": 123,
"document_printer_id": 124
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"job_id": "123456789"
}
Example response (400):
{
"message": "failed"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
job_id
string|integer
Internal batch job id.
Print uploaded file
requires authentication
Sends an uploaded PDF file directly to a printer via PrintNode.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/document/print-file';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
],
'multipart' => [
[
'name' => 'printer_id',
'contents' => '123'
],
[
'name' => 'file',
'contents' => fopen('/tmp/php7mbibud5fi0faGgloNO', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/document/print-file" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--form "printer_id=123"\
--form "file=@/tmp/php7mbibud5fi0faGgloNO" const url = new URL(
"https://app.packflow.se/api/v1/document/print-file"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('printer_id', '123');
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/document/print-file'
files = {
'printer_id': (None, '123'),
'file': open('/tmp/php7mbibud5fi0faGgloNO', 'rb')}
payload = {
"printer_id": 123
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Example response (200):
{
"message": "success",
"job_id": 123456789
}
Example response (400):
{
"message": "failed",
"reason": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
job_id
integer
PrintNode job ID.
Email document
requires authentication
Sends documents to email. Will send labels, delivery notes, shipment lists, customs declarations, picklists and packlists.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/document/email/all';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'ids' => [
'0527cbbe-d1e9-454d-8770-ce66da5f8d1a',
'185dfc35-5644-46d7-9fba-f0264b7666a5',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/document/email/all" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"ids\": [
\"0527cbbe-d1e9-454d-8770-ce66da5f8d1a\",
\"185dfc35-5644-46d7-9fba-f0264b7666a5\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/document/email/all"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ids": [
"0527cbbe-d1e9-454d-8770-ce66da5f8d1a",
"185dfc35-5644-46d7-9fba-f0264b7666a5"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/document/email/all'
payload = {
"ids": [
"0527cbbe-d1e9-454d-8770-ce66da5f8d1a",
"185dfc35-5644-46d7-9fba-f0264b7666a5"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"email": "your@company.com"
}
Example response (400):
{
"message": "failed",
"reason": "No shipments found"
}
Example response (400):
{
"message": "failed",
"reason": "Invalid email address"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
email
string
The email address the documents were sent to.
Endpoints
Get service points for the public checkout demo.
requires authentication
This adapts the simple zipcode request to the format expected by ServicePointsController.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/public/service-points';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/public/service-points" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/public/service-points"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/public/service-points'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('POST', url, headers=headers)
response.json()Example response (422):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 600
x-ratelimit-remaining: 599
vary: Origin
{
"message": "Validation Error",
"errors": {
"zipcode": [
"The zipcode field is required."
],
"shipper_alias": [
"The shipper_alias field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Public service-points lookup for the portal.
requires authentication
Resolves the account's own shipper_service_token so real service points are returned. POST /v1/public/portal/{slug}/service-points
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/public/portal/ipsam/service-points';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipper_alias' => 'accusantium',
'address' => [
'country' => 'by',
'zipcode' => 'kqqvdnxt',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/public/portal/ipsam/service-points" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipper_alias\": \"accusantium\",
\"address\": {
\"country\": \"by\",
\"zipcode\": \"kqqvdnxt\"
}
}"
const url = new URL(
"https://app.packflow.se/api/v1/public/portal/ipsam/service-points"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipper_alias": "accusantium",
"address": {
"country": "by",
"zipcode": "kqqvdnxt"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/public/portal/ipsam/service-points'
payload = {
"shipper_alias": "accusantium",
"address": {
"country": "by",
"zipcode": "kqqvdnxt"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (404):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
vary: Origin
{
"message": "Portal not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/orders/{orderId}/tags
requires authentication
DELETE api/v1/orders/{orderId}/tags/{tagId}
requires authentication
GET api/v1/analytics/shipments/{alias}/{startDate}/{endDate}
requires authentication
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/analytics/shipments/neque/ullam/quae';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/analytics/shipments/neque/ullam/quae" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/analytics/shipments/neque/ullam/quae"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/analytics/shipments/neque/ullam/quae'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated",
"error": "Unauthenticated.",
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 87,
"function": "unauthenticated",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 61,
"function": "authenticate",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{},
"sanctum"
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::handle():25}",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 25,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
},
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php",
"line": 13,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\FlushEventsMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php",
"line": 45,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestIpMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php",
"line": 31,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
"line": 79,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Tracing\\Middleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 236,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 229,
"function": "callLaravelRoute",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 103,
"function": "makeApiCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 39,
"function": "makeResponseCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"metadata": {
"custom": [],
"groupName": "Endpoints",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "",
"description": "",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"alias": {
"custom": [],
"name": "alias",
"description": "",
"required": true,
"example": "neque",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"startDate": {
"custom": [],
"name": "startDate",
"description": "",
"required": true,
"example": "ullam",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"endDate": {
"custom": [],
"name": "endDate",
"description": "",
"required": true,
"example": "quae",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer aVb5Z8P63vkfhcEDe6g4ad1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"method": {
"name": "shipments",
"class": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"route": {
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 466,
"function": "__invoke",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"metadata": {
"custom": [],
"groupName": "Endpoints",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "",
"description": "",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"alias": {
"custom": [],
"name": "alias",
"description": "",
"required": true,
"example": "neque",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"startDate": {
"custom": [],
"name": "startDate",
"description": "",
"required": true,
"example": "ullam",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"endDate": {
"custom": [],
"name": "endDate",
"description": "",
"required": true,
"example": "quae",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer aVb5Z8P63vkfhcEDe6g4ad1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"method": {
"name": "shipments",
"class": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"route": {
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 392,
"function": "iterateThroughStrategies",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
"responses",
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"metadata": {
"custom": [],
"groupName": "Endpoints",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "",
"description": "",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"alias": {
"custom": [],
"name": "alias",
"description": "",
"required": true,
"example": "neque",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"startDate": {
"custom": [],
"name": "startDate",
"description": "",
"required": true,
"example": "ullam",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"endDate": {
"custom": [],
"name": "endDate",
"description": "",
"required": true,
"example": "quae",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer aVb5Z8P63vkfhcEDe6g4ad1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"method": {
"name": "shipments",
"class": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"route": {
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
},
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 93,
"function": "fetchResponses",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"metadata": {
"custom": [],
"groupName": "Endpoints",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "",
"description": "",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"alias": {
"custom": [],
"name": "alias",
"description": "",
"required": true,
"example": "neque",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"startDate": {
"custom": [],
"name": "startDate",
"description": "",
"required": true,
"example": "ullam",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
},
"endDate": {
"custom": [],
"name": "endDate",
"description": "",
"required": true,
"example": "quae",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer aVb5Z8P63vkfhcEDe6g4ad1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"method": {
"name": "shipments",
"class": "App\\Http\\Controllers\\Api\\AnalyticsController"
},
"route": {
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 186,
"function": "processRoute",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"uri": "api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"uses": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"controller": "\\App\\Http\\Controllers\\Api\\AnalyticsController@shipments",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"alias": "neque",
"startDate": "ullam",
"endDate": "quae"
},
"parameterNames": [
"alias",
"startDate",
"endDate"
],
"computedMiddleware": [
"api",
"auth:sanctum",
"isAdmin"
],
"compiled": {}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
"line": 41,
"function": "{closure:Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp::extractEndpointsInfoFromLaravelApp():185}",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
"line": 59,
"function": "render",
"class": "Illuminate\\Console\\View\\Components\\Task",
"type": "->",
"args": [
"<options=bold>[<fg=cyan>GET</>]</> api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 183,
"function": "__call",
"class": "Illuminate\\Console\\View\\Components\\Factory",
"type": "->",
"args": [
"task",
[
"[<fg=cyan>GET</>] api/v1/analytics/shipments/{alias}/{startDate}/{endDate}",
{}
]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 73,
"function": "extractEndpointsInfoFromLaravelApp",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
],
[],
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 51,
"function": "extractEndpointsInfoAndWriteToDisk",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
{},
true
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
"line": 55,
"function": "get",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 36,
"function": "handle",
"class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Util.php",
"line": 43,
"function": "{closure:Illuminate\\Container\\BoundMethod::call():35}",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 96,
"function": "unwrapIfClosure",
"class": "Illuminate\\Container\\Util",
"type": "::",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 35,
"function": "callBoundMethod",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Container.php",
"line": 799,
"function": "call",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
[],
null
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 211,
"function": "call",
"class": "Illuminate\\Container\\Container",
"type": "->",
"args": [
[
{},
"handle"
]
]
},
{
"file": "/app/vendor/symfony/console/Command/Command.php",
"line": 341,
"function": "execute",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 180,
"function": "run",
"class": "Symfony\\Component\\Console\\Command\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 1117,
"function": "run",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 356,
"function": "doRunCommand",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 195,
"function": "doRun",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
"line": 198,
"function": "run",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/artisan",
"line": 35,
"function": "handle",
"class": "Illuminate\\Foundation\\Console\\Kernel",
"type": "->",
"args": [
{},
{}
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Orders
APIs for managing orders
Fetch orders
requires authentication
Fetch orders from specified account connection.
Orders will be stored in Packlow, not returned in response.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/fetch/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/fetch/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/fetch/1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/fetch/1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, No new orders found):
{
"message": "complete",
"jobs": 0
}
Example response (201, 3 orders found):
{
"message": "success",
"jobs": 3
}
Example response (400, Various errors):
{
"message": "Unknown"
}
Example response (403, Unauthorized to access this connection):
{
"message": "Forbidden"
}
Example response (404, No new orders to fetch):
{
"message": "No orders found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
jobs
integer
The total number of orders being processed.
Get product breakdown
requires authentication
Returns aggregated product quantities from unsent orders, grouped by SKU and title. Respects the same filters as the orders list (search, product, mode).
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/product-breakdown';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
'query' => [
'search' => 'john',
'product' => 'ABC-123',
'mode' => 'necessitatibus',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/product-breakdown?search=john&product=ABC-123&mode=necessitatibus" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/product-breakdown"
);
const params = {
"search": "john",
"product": "ABC-123",
"mode": "necessitatibus",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/product-breakdown'
params = {
'search': 'john',
'product': 'ABC-123',
'mode': 'necessitatibus',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated",
"error": "Unauthenticated.",
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 87,
"function": "unauthenticated",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 61,
"function": "authenticate",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{},
"sanctum"
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::handle():25}",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 25,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php",
"line": 13,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\FlushEventsMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php",
"line": 45,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestIpMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php",
"line": 31,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
"line": 79,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Tracing\\Middleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 236,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 229,
"function": "callLaravelRoute",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 103,
"function": "makeApiCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 39,
"function": "makeResponseCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/product-breakdown",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "\nAPIs for managing orders",
"subgroup": "",
"subgroupDescription": "",
"title": "Get product breakdown",
"description": "Returns aggregated product quantities from unsent orders, grouped by SKU and title.\nRespects the same filters as the orders list (search, product, mode).",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": {
"search": {
"custom": [],
"name": "search",
"description": "Optional general search filter.",
"required": false,
"example": "john",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"product": {
"custom": [],
"name": "product",
"description": "Optional product SKU filter.",
"required": false,
"example": "ABC-123",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"mode": {
"custom": [],
"name": "mode",
"description": "Filter mode for product: contains|hasOnly|containsText. Default: contains",
"required": false,
"example": "necessitatibus",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanQueryParameters": {
"search": "john",
"product": "ABC-123",
"mode": "necessitatibus"
},
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer EZD6a1k4bfac6hV53ed8Pvg"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "productBreakdown",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 466,
"function": "__invoke",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/product-breakdown",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "\nAPIs for managing orders",
"subgroup": "",
"subgroupDescription": "",
"title": "Get product breakdown",
"description": "Returns aggregated product quantities from unsent orders, grouped by SKU and title.\nRespects the same filters as the orders list (search, product, mode).",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": {
"search": {
"custom": [],
"name": "search",
"description": "Optional general search filter.",
"required": false,
"example": "john",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"product": {
"custom": [],
"name": "product",
"description": "Optional product SKU filter.",
"required": false,
"example": "ABC-123",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"mode": {
"custom": [],
"name": "mode",
"description": "Filter mode for product: contains|hasOnly|containsText. Default: contains",
"required": false,
"example": "necessitatibus",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanQueryParameters": {
"search": "john",
"product": "ABC-123",
"mode": "necessitatibus"
},
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer EZD6a1k4bfac6hV53ed8Pvg"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "productBreakdown",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 392,
"function": "iterateThroughStrategies",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
"responses",
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/product-breakdown",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "\nAPIs for managing orders",
"subgroup": "",
"subgroupDescription": "",
"title": "Get product breakdown",
"description": "Returns aggregated product quantities from unsent orders, grouped by SKU and title.\nRespects the same filters as the orders list (search, product, mode).",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": {
"search": {
"custom": [],
"name": "search",
"description": "Optional general search filter.",
"required": false,
"example": "john",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"product": {
"custom": [],
"name": "product",
"description": "Optional product SKU filter.",
"required": false,
"example": "ABC-123",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"mode": {
"custom": [],
"name": "mode",
"description": "Filter mode for product: contains|hasOnly|containsText. Default: contains",
"required": false,
"example": "necessitatibus",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanQueryParameters": {
"search": "john",
"product": "ABC-123",
"mode": "necessitatibus"
},
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer EZD6a1k4bfac6hV53ed8Pvg"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "productBreakdown",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
},
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 93,
"function": "fetchResponses",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/product-breakdown",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "\nAPIs for managing orders",
"subgroup": "",
"subgroupDescription": "",
"title": "Get product breakdown",
"description": "Returns aggregated product quantities from unsent orders, grouped by SKU and title.\nRespects the same filters as the orders list (search, product, mode).",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": {
"search": {
"custom": [],
"name": "search",
"description": "Optional general search filter.",
"required": false,
"example": "john",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"product": {
"custom": [],
"name": "product",
"description": "Optional product SKU filter.",
"required": false,
"example": "ABC-123",
"type": "string",
"enumValues": [],
"exampleWasSpecified": true,
"nullable": false,
"deprecated": false
},
"mode": {
"custom": [],
"name": "mode",
"description": "Filter mode for product: contains|hasOnly|containsText. Default: contains",
"required": false,
"example": "necessitatibus",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanQueryParameters": {
"search": "john",
"product": "ABC-123",
"mode": "necessitatibus"
},
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer EZD6a1k4bfac6hV53ed8Pvg"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "productBreakdown",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 186,
"function": "processRoute",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"uri": "api/v1/orders/product-breakdown",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@productBreakdown",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
"line": 41,
"function": "{closure:Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp::extractEndpointsInfoFromLaravelApp():185}",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
"line": 59,
"function": "render",
"class": "Illuminate\\Console\\View\\Components\\Task",
"type": "->",
"args": [
"<options=bold>[<fg=cyan>GET</>]</> api/v1/orders/product-breakdown",
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 183,
"function": "__call",
"class": "Illuminate\\Console\\View\\Components\\Factory",
"type": "->",
"args": [
"task",
[
"[<fg=cyan>GET</>] api/v1/orders/product-breakdown",
{}
]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 73,
"function": "extractEndpointsInfoFromLaravelApp",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
],
[],
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 51,
"function": "extractEndpointsInfoAndWriteToDisk",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
{},
true
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
"line": 55,
"function": "get",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 36,
"function": "handle",
"class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Util.php",
"line": 43,
"function": "{closure:Illuminate\\Container\\BoundMethod::call():35}",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 96,
"function": "unwrapIfClosure",
"class": "Illuminate\\Container\\Util",
"type": "::",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 35,
"function": "callBoundMethod",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Container.php",
"line": 799,
"function": "call",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
[],
null
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 211,
"function": "call",
"class": "Illuminate\\Container\\Container",
"type": "->",
"args": [
[
{},
"handle"
]
]
},
{
"file": "/app/vendor/symfony/console/Command/Command.php",
"line": 341,
"function": "execute",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 180,
"function": "run",
"class": "Symfony\\Component\\Console\\Command\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 1117,
"function": "run",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 356,
"function": "doRunCommand",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 195,
"function": "doRun",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
"line": 198,
"function": "run",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/artisan",
"line": 35,
"function": "handle",
"class": "Illuminate\\Foundation\\Console\\Kernel",
"type": "->",
"args": [
{},
{}
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
sku
string
The product SKU.
title
string
The product title.
total_quantity
integer
Total quantity across all matching orders.
order_count
integer
Number of orders containing this product.
Find identical orders
requires authentication
Returns groups of orders that have identical SKUs and quantities. Uses the same filters as the orders list endpoint.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/identical-groups';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/identical-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/identical-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/identical-groups'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated",
"error": "Unauthenticated.",
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 87,
"function": "unauthenticated",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 61,
"function": "authenticate",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{},
"sanctum"
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::handle():25}",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 25,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php",
"line": 13,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\FlushEventsMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php",
"line": 45,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestIpMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php",
"line": 31,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
"line": 79,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Tracing\\Middleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 236,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 229,
"function": "callLaravelRoute",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 103,
"function": "makeApiCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 39,
"function": "makeResponseCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/identical-groups",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "Find identical orders",
"description": "Returns groups of orders that have identical SKUs and quantities.\nUses the same filters as the orders list endpoint.",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer bE8vP51Zhf6a4gdD6Ve3kac"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "identicalGroups",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 466,
"function": "__invoke",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/identical-groups",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "Find identical orders",
"description": "Returns groups of orders that have identical SKUs and quantities.\nUses the same filters as the orders list endpoint.",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer bE8vP51Zhf6a4gdD6Ve3kac"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "identicalGroups",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 392,
"function": "iterateThroughStrategies",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
"responses",
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/identical-groups",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "Find identical orders",
"description": "Returns groups of orders that have identical SKUs and quantities.\nUses the same filters as the orders list endpoint.",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer bE8vP51Zhf6a4gdD6Ve3kac"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "identicalGroups",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
},
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 93,
"function": "fetchResponses",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/orders/identical-groups",
"metadata": {
"custom": [],
"groupName": "Orders",
"groupDescription": "",
"subgroup": "",
"subgroupDescription": "",
"title": "Find identical orders",
"description": "Returns groups of orders that have identical SKUs and quantities.\nUses the same filters as the orders list endpoint.",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer bE8vP51Zhf6a4gdD6Ve3kac"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\OrderController"
},
"method": {
"name": "identicalGroups",
"class": "App\\Http\\Controllers\\Api\\OrderController"
},
"route": {
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 186,
"function": "processRoute",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"uri": "api/v1/orders/identical-groups",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"controller": "\\App\\Http\\Controllers\\Api\\OrderController@identicalGroups",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
"line": 41,
"function": "{closure:Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp::extractEndpointsInfoFromLaravelApp():185}",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
"line": 59,
"function": "render",
"class": "Illuminate\\Console\\View\\Components\\Task",
"type": "->",
"args": [
"<options=bold>[<fg=cyan>GET</>]</> api/v1/orders/identical-groups",
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 183,
"function": "__call",
"class": "Illuminate\\Console\\View\\Components\\Factory",
"type": "->",
"args": [
"task",
[
"[<fg=cyan>GET</>] api/v1/orders/identical-groups",
{}
]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 73,
"function": "extractEndpointsInfoFromLaravelApp",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
],
[],
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 51,
"function": "extractEndpointsInfoAndWriteToDisk",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
{},
true
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
"line": 55,
"function": "get",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 36,
"function": "handle",
"class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Util.php",
"line": 43,
"function": "{closure:Illuminate\\Container\\BoundMethod::call():35}",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 96,
"function": "unwrapIfClosure",
"class": "Illuminate\\Container\\Util",
"type": "::",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 35,
"function": "callBoundMethod",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Container.php",
"line": 799,
"function": "call",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
[],
null
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 211,
"function": "call",
"class": "Illuminate\\Container\\Container",
"type": "->",
"args": [
[
{},
"handle"
]
]
},
{
"file": "/app/vendor/symfony/console/Command/Command.php",
"line": 341,
"function": "execute",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 180,
"function": "run",
"class": "Symfony\\Component\\Console\\Command\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 1117,
"function": "run",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 356,
"function": "doRunCommand",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 195,
"function": "doRun",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
"line": 198,
"function": "run",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/artisan",
"line": 35,
"function": "handle",
"class": "Illuminate\\Foundation\\Console\\Kernel",
"type": "->",
"args": [
{},
{}
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
groups
string[]
List of identical order groups.
total_groups
integer
Total number of groups found.
total_orders_in_groups
integer
Total orders across all groups.
Get orders
requires authentication
Get the fetched orders from Packflow
The response will contain an array with order objects and total count. The default limit is 100 orders. The orders are sorted by sent_date and order_date in descending order. If more than 100 orders exists, the page parameter can be used to fetch more orders.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/new|sent/labore';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
'query' => [
'page' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/new|sent/labore?page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/new|sent/labore"
);
const params = {
"page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/new|sent/labore'
params = {
'page': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"orders": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"receiver_id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"account_connection_id": 10,
"shop_order_id": "123456789",
"shop_order_id_alias": null,
"source_shipper_id": "123",
"account_id": 1,
"user_id": 1,
"parcels": 1,
"amount": "150.000",
"items_amount": 120,
"currency_iso": "SEK",
"country_iso": "SE",
"weight": 150,
"order_date": "2023-08-11 12:04:21",
"shipper_alias": "PNVB",
"complete": 0,
"booked": 0,
"sent_date": null,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:09:10",
"deleted_at": null,
"receiver": {
"id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Testgatan 1",
"address2": null,
"zipcode": "12345",
"city": "Stockholm",
"state": null,
"country_iso": "SE",
"email": "test@test.com",
"phone": null,
"cellphone": "0701234567",
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
"items": [
{
"id": "03fe86a2-e9d9-4be2-bb33-8d35f6c53908",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU001",
"title": "Sample Product",
"weight": 75,
"price": "100.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A1",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
{
"id": "0571fd5e-5426-4016-9a1a-a6b2d4eb57c5",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU002",
"title": "Another product",
"weight": 75,
"price": "50.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A2",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
}
]
}
],
"total": 150
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get order
requires authentication
Get a specific order stored in Packflow
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"orders": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"receiver_id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"account_connection_id": 10,
"shop_order_id": "123456789",
"shop_order_id_alias": null,
"source_shipper_id": "123",
"account_id": 1,
"user_id": 1,
"parcels": 1,
"amount": "150.000",
"items_amount": 120,
"currency_iso": "SEK",
"country_iso": "SE",
"weight": 150,
"order_date": "2023-08-11 12:04:21",
"shipper_alias": "PNVB",
"complete": 0,
"booked": 0,
"sent_date": null,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:09:10",
"deleted_at": null,
"receiver": {
"id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Testgatan 1",
"address2": null,
"zipcode": "12345",
"city": "Stockholm",
"state": null,
"country_iso": "SE",
"email": "test@test.com",
"phone": null,
"cellphone": "0701234567",
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
"items": [
{
"id": "03fe86a2-e9d9-4be2-bb33-8d35f6c53908",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU001",
"title": "Sample Product",
"weight": 75,
"price": "100.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A1",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
{
"id": "0571fd5e-5426-4016-9a1a-a6b2d4eb57c5",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU002",
"title": "Another product",
"weight": 75,
"price": "50.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A2",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
}
]
}
],
"total": 150
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update order
requires authentication
Update order stored in Packflow.
Some fields (account_connection_id, account_id, user_id) are read only and will not be updated.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/ullam';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'id' => '156cb70d-945f-4b70-ab23-88d02d24ed8c',
'parcels' => 2,
'shipper_alias' => 'PNVB',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PATCH \
"https://app.packflow.se/api/v1/orders/ullam" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"id\": \"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"parcels\": 2,
\"shipper_alias\": \"PNVB\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/orders/ullam"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"parcels": 2,
"shipper_alias": "PNVB"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/ullam'
payload = {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"parcels": 2,
"shipper_alias": "PNVB"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{message: "success"}
Example response (400):
{"message": "Invalid JSON payload"}"
Example response (404, Order not found):
{
"message": "Not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Deliver order
requires authentication
Mark order as delivered, no update to source.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/deliver';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
'156cb70d-945f-4b70-ab23-88d02d24ed2a',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/orders/deliver" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "[
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"156cb70d-945f-4b70-ab23-88d02d24ed2a\"
]"
const url = new URL(
"https://app.packflow.se/api/v1/orders/deliver"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"156cb70d-945f-4b70-ab23-88d02d24ed2a"
];
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/deliver'
payload = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"156cb70d-945f-4b70-ab23-88d02d24ed2a"
]
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200, All orders delivered):
{
"message": "complete"
}
Example response (403, Unauthorized to access order):
{
"message": "Forbidden"
}
Example response (404, Order not found):
{
"message": "Not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Search order
requires authentication
Search for orders in address field: source order id (alias), name, company, address, email, phone.
The response will contain an array with max 20 order objects.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/search/462343 or John Doe';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/search/462343 or John Doe" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/search/462343 or John Doe"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/search/462343 or John Doe'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"orders": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"receiver_id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"account_connection_id": 10,
"shop_order_id": "123456789",
"shop_order_id_alias": null,
"source_shipper_id": "123",
"account_id": 1,
"user_id": 1,
"parcels": 1,
"amount": "150.000",
"items_amount": 120,
"currency_iso": "SEK",
"country_iso": "SE",
"weight": 150,
"order_date": "2023-08-11 12:04:21",
"shipper_alias": "PNVB",
"complete": 0,
"booked": 0,
"sent_date": null,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:09:10",
"deleted_at": null,
"receiver": {
"id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Testgatan 1",
"address2": null,
"zipcode": "12345",
"city": "Stockholm",
"state": null,
"country_iso": "SE",
"email": "test@test.com",
"phone": null,
"cellphone": "0701234567",
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
"items": [
{
"id": "03fe86a2-e9d9-4be2-bb33-8d35f6c53908",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU001",
"title": "Sample Product",
"weight": 75,
"price": "100.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A1",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
{
"id": "0571fd5e-5426-4016-9a1a-a6b2d4eb57c5",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU002",
"title": "Another product",
"weight": 75,
"price": "50.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A2",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
}
]
}
],
"total": 150
}
Example response (404, No order found):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete orders
requires authentication
Delete orders by id.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request DELETE \
"https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200, Delete successful):
Example response (403, Forbidden):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Create order
requires authentication
Create a new order in Packflow
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shop_order_id' => '5373921919213',
'shop_order_id_alias' => '#1001',
'source_shipper_id' => '123456',
'parcels' => 1,
'amount' => 100.0,
'items_amount' => 90.0,
'currency_iso' => 'SEK',
'weight' => 1250,
'order_date' => '2026-04-28 21:38:21',
'booked' => 0,
'reference' => 'Free samples',
'package_size_id' => 9,
'firstname' => 'John',
'lastname' => 'Doe',
'company_name' => 'John Doe AB',
'address' => 'Storgatan 1',
'zipcode' => '12345',
'city' => 'Stockholm',
'country_iso' => 'SE',
'email' => 'john@doe.com',
'cellphone' => '0701234567',
'phone' => '081234567',
'items' => [
[
'sku' => 'skjdl',
'title' => 'qjefyzfncgttfmgelo',
],
],
'address2' => 'Lgh 123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/orders" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shop_order_id\": \"5373921919213\",
\"shop_order_id_alias\": \"#1001\",
\"source_shipper_id\": \"123456\",
\"parcels\": 1,
\"amount\": 100,
\"items_amount\": 90,
\"currency_iso\": \"SEK\",
\"weight\": 1250,
\"order_date\": \"2026-04-28 21:38:21\",
\"booked\": 0,
\"reference\": \"Free samples\",
\"package_size_id\": 9,
\"firstname\": \"John\",
\"lastname\": \"Doe\",
\"company_name\": \"John Doe AB\",
\"address\": \"Storgatan 1\",
\"zipcode\": \"12345\",
\"city\": \"Stockholm\",
\"country_iso\": \"SE\",
\"email\": \"john@doe.com\",
\"cellphone\": \"0701234567\",
\"phone\": \"081234567\",
\"items\": [
{
\"sku\": \"skjdl\",
\"title\": \"qjefyzfncgttfmgelo\"
}
],
\"address2\": \"Lgh 123\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/orders"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shop_order_id": "5373921919213",
"shop_order_id_alias": "#1001",
"source_shipper_id": "123456",
"parcels": 1,
"amount": 100,
"items_amount": 90,
"currency_iso": "SEK",
"weight": 1250,
"order_date": "2026-04-28 21:38:21",
"booked": 0,
"reference": "Free samples",
"package_size_id": 9,
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Storgatan 1",
"zipcode": "12345",
"city": "Stockholm",
"country_iso": "SE",
"email": "john@doe.com",
"cellphone": "0701234567",
"phone": "081234567",
"items": [
{
"sku": "skjdl",
"title": "qjefyzfncgttfmgelo"
}
],
"address2": "Lgh 123"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders'
payload = {
"shop_order_id": "5373921919213",
"shop_order_id_alias": "#1001",
"source_shipper_id": "123456",
"parcels": 1,
"amount": 100,
"items_amount": 90,
"currency_iso": "SEK",
"weight": 1250,
"order_date": "2026-04-28 21:38:21",
"booked": 0,
"reference": "Free samples",
"package_size_id": 9,
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Storgatan 1",
"zipcode": "12345",
"city": "Stockholm",
"country_iso": "SE",
"email": "john@doe.com",
"cellphone": "0701234567",
"phone": "081234567",
"items": [
{
"sku": "skjdl",
"title": "qjefyzfncgttfmgelo"
}
],
"address2": "Lgh 123"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"orders": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"receiver_id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"account_connection_id": 10,
"shop_order_id": "123456789",
"shop_order_id_alias": null,
"source_shipper_id": "123",
"account_id": 1,
"user_id": 1,
"parcels": 1,
"amount": "150.000",
"items_amount": 120,
"currency_iso": "SEK",
"country_iso": "SE",
"weight": 150,
"order_date": "2023-08-11 12:04:21",
"shipper_alias": "PNVB",
"complete": 0,
"booked": 0,
"sent_date": null,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:09:10",
"deleted_at": null,
"receiver": {
"id": "a2693ecf-b0e6-432d-ba89-da3332d4fbdd",
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Testgatan 1",
"address2": null,
"zipcode": "12345",
"city": "Stockholm",
"state": null,
"country_iso": "SE",
"email": "test@test.com",
"phone": null,
"cellphone": "0701234567",
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
"items": [
{
"id": "03fe86a2-e9d9-4be2-bb33-8d35f6c53908",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU001",
"title": "Sample Product",
"weight": 75,
"price": "100.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A1",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
},
{
"id": "0571fd5e-5426-4016-9a1a-a6b2d4eb57c5",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sku": "SKU002",
"title": "Another product",
"weight": 75,
"price": "50.000",
"origin_country_iso": "SE",
"hs_code": "381400",
"length": 100,
"width": 50,
"height": 75,
"quantity": 1,
"origin_quantity": 1,
"shelf": "A2",
"row_id": null,
"colli": 1,
"created_at": "2023-08-11 12:05:10",
"updated_at": "2023-08-11 12:05:10"
}
]
}
],
"total": 150
}
Example response (400):
{
"message": "Invalid JSON payload"
}
Example response (400, Validation error):
{
"field name": [
"error message"
]
}
Example response (403):
{
"message": "Forbidden"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
order
object.
Get order item
requires authentication
Returns an order item
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"id": "028898a4-e3b6-43dd-8958-68870b336772",
"order_id": "986db36d-f7bd-400d-a67a-29ac1d0129c7",
"sku": "eligendi",
"title": "quo itaque",
"weight": 24,
"price": "540.000",
"origin_country_iso": null,
"hs_code": null,
"length": null,
"width": null,
"height": null,
"quantity": 4,
"origin_quantity": 4,
"shelf": null,
"row_id": null,
"created_at": "2023-08-25T11:35:50.000000Z",
"updated_at": "2023-08-25T11:35:50.000000Z"
}
Example response (403, Unauthorized access to order item):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Order item not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Update order item
requires authentication
Update an order item
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'sku' => 'jmrhiubebpyigmxoeugqoper',
'title' => 'hogt',
'weight' => 6883.49,
'price' => 2795349.0,
'origin_country_iso' => 'sb',
'hs_code' => 'hvssryhf',
'length' => 108421.596582961,
'width' => 114.001477,
'height' => 62265723.0,
'quantity' => 2642276.0,
'origin_quantity' => 63539.0,
'shelf' => 'ahbdxzzdy',
'ean' => 'qhkyvvasyupo',
'row_id' => 82.130258,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PATCH \
"https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"sku\": \"jmrhiubebpyigmxoeugqoper\",
\"title\": \"hogt\",
\"weight\": 6883.49,
\"price\": 2795349,
\"origin_country_iso\": \"sb\",
\"hs_code\": \"hvssryhf\",
\"length\": 108421.596582961,
\"width\": 114.001477,
\"height\": 62265723,
\"quantity\": 2642276,
\"origin_quantity\": 63539,
\"shelf\": \"ahbdxzzdy\",
\"ean\": \"qhkyvvasyupo\",
\"row_id\": 82.130258
}"
const url = new URL(
"https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sku": "jmrhiubebpyigmxoeugqoper",
"title": "hogt",
"weight": 6883.49,
"price": 2795349,
"origin_country_iso": "sb",
"hs_code": "hvssryhf",
"length": 108421.596582961,
"width": 114.001477,
"height": 62265723,
"quantity": 2642276,
"origin_quantity": 63539,
"shelf": "ahbdxzzdy",
"ean": "qhkyvvasyupo",
"row_id": 82.130258
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c'
payload = {
"sku": "jmrhiubebpyigmxoeugqoper",
"title": "hogt",
"weight": 6883.49,
"price": 2795349,
"origin_country_iso": "sb",
"hs_code": "hvssryhf",
"length": 108421.596582961,
"width": 114.001477,
"height": 62265723,
"quantity": 2642276,
"origin_quantity": 63539,
"shelf": "ahbdxzzdy",
"ean": "qhkyvvasyupo",
"row_id": 82.130258
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"id": "028898a4-e3b6-43dd-8958-68870b336772",
"order_id": "986db36d-f7bd-400d-a67a-29ac1d0129c7",
"sku": "eligendi",
"title": "quo itaque",
"weight": 24,
"price": "540.000",
"origin_country_iso": null,
"hs_code": null,
"length": null,
"width": null,
"height": null,
"quantity": 4,
"origin_quantity": 4,
"shelf": null,
"row_id": null,
"created_at": "2023-08-25T11:35:50.000000Z",
"updated_at": "2023-08-25T11:35:50.000000Z"
}
Example response (400, Various errors):
{
"message": "Unknown"
}
Example response (403, Unauthorized to access order item):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Order item not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Create order item
requires authentication
Create a new order item
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c/items';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'sku' => 'SAMSUNG-S20',
'title' => 'Samsung Galaxy S20',
'weight' => 163.0,
'price' => 3499.0,
'origin_country_iso' => 'CN',
'hs_code' => '85171200',
'length' => 15.0,
'width' => 10.0,
'height' => 5.0,
'quantity' => 1,
'shelf' => 'PLA-H4',
'ean' => 'fdeqljudxcpweydkc',
'row_id' => 2,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c/items" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"sku\": \"SAMSUNG-S20\",
\"title\": \"Samsung Galaxy S20\",
\"weight\": 163,
\"price\": 3499,
\"origin_country_iso\": \"CN\",
\"hs_code\": \"85171200\",
\"length\": 15,
\"width\": 10,
\"height\": 5,
\"quantity\": 1,
\"shelf\": \"PLA-H4\",
\"ean\": \"fdeqljudxcpweydkc\",
\"row_id\": 2
}"
const url = new URL(
"https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c/items"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sku": "SAMSUNG-S20",
"title": "Samsung Galaxy S20",
"weight": 163,
"price": 3499,
"origin_country_iso": "CN",
"hs_code": "85171200",
"length": 15,
"width": 10,
"height": 5,
"quantity": 1,
"shelf": "PLA-H4",
"ean": "fdeqljudxcpweydkc",
"row_id": 2
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/156cb70d-945f-4b70-ab23-88d02d24ed8c/items'
payload = {
"sku": "SAMSUNG-S20",
"title": "Samsung Galaxy S20",
"weight": 163,
"price": 3499,
"origin_country_iso": "CN",
"hs_code": "85171200",
"length": 15,
"width": 10,
"height": 5,
"quantity": 1,
"shelf": "PLA-H4",
"ean": "fdeqljudxcpweydkc",
"row_id": 2
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"id": "028898a4-e3b6-43dd-8958-68870b336772",
"order_id": "986db36d-f7bd-400d-a67a-29ac1d0129c7",
"sku": "eligendi",
"title": "quo itaque",
"weight": 24,
"price": "540.000",
"origin_country_iso": null,
"hs_code": null,
"length": null,
"width": null,
"height": null,
"quantity": 4,
"origin_quantity": 4,
"shelf": null,
"row_id": null,
"created_at": "2023-08-25T11:35:50.000000Z",
"updated_at": "2023-08-25T11:35:50.000000Z"
}
Example response (400, Various errors):
{
"message": "Unknown"
}
Example response (403, Unauthorized access to order):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Order not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Delete order item
requires authentication
Deletes an order item.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request DELETE \
"https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/orders/items/156cb70d-945f-4b70-ab23-88d02d24ed8c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200, Delete successful):
Example response (403, Forbidden):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Package Sizes
APIs for managing package sizes
Get all package sizes
requires authentication
Returns a list of all package sizes for the authenticated user's active account.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/package-sizes';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/package-sizes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/package-sizes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/package-sizes'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"id": 1,
"name": "Small",
"length": 10,
"width": 10,
"height": 10,
"account_id": 1,
"created_at": "2024-01-01T00:00:00.000000Z",
"updated_at": "2024-01-01T00:00:00.000000Z"
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create a new package size
requires authentication
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/package-sizes';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'name' => 'Small',
'length' => '10',
'width' => '10',
'height' => '10',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/package-sizes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"name\": \"Small\",
\"length\": \"10\",
\"width\": \"10\",
\"height\": \"10\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/package-sizes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Small",
"length": "10",
"width": "10",
"height": "10"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/package-sizes'
payload = {
"name": "Small",
"length": "10",
"width": "10",
"height": "10"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"data": {
"id": 1,
"name": "Small",
"length": 10,
"width": 10,
"height": 10,
"account_id": 1,
"created_at": "2024-01-01T00:00:00.000000Z",
"updated_at": "2024-01-01T00:00:00.000000Z"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name field is required."
],
"length": [
"The length must be at least 1."
],
"width": [
"The width must be at least 1."
],
"height": [
"The height must be at least 1."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Pickup
APIs for managing pickups
Request pickup
requires authentication
Create a pickup request for the selected shipments.
Note: Either address_id or address_alias must be provided.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/pickup';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipment_ids' => [
1,
2,
3,
],
'address_id' => 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'address_alias' => 'Warehouse',
'date' => '2025-01-15',
'location' => 'Reception',
'start' => '09:00',
'end' => '17:00',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/pickup" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipment_ids\": [
1,
2,
3
],
\"address_id\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",
\"address_alias\": \"Warehouse\",
\"date\": \"2025-01-15\",
\"location\": \"Reception\",
\"start\": \"09:00\",
\"end\": \"17:00\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/pickup"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipment_ids": [
1,
2,
3
],
"address_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"address_alias": "Warehouse",
"date": "2025-01-15",
"location": "Reception",
"start": "09:00",
"end": "17:00"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/pickup'
payload = {
"shipment_ids": [
1,
2,
3
],
"address_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"address_alias": "Warehouse",
"date": "2025-01-15",
"location": "Reception",
"start": "09:00",
"end": "17:00"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201, Success):
{
"data": [
{
"status": 200,
"message": "Booking confirmed. Booking number: 123456",
"carrier": "PostNord"
}
]
}
Example response (400, Error):
{
"data": [
{
"status": 400,
"message": "No booking created.",
"carrier": ""
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Validate shipments
requires authentication
Validate if the selected shipments can be picked up
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/pickup/validate';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'ids' => [
1,
2,
3,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/pickup/validate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"ids\": [
1,
2,
3
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/pickup/validate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ids": [
1,
2,
3
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/pickup/validate'
payload = {
"ids": [
1,
2,
3
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200, Success):
{
"data": [
{
"shipmentId": 1,
"isValid": true,
"shop_order_id": 123,
"carrier": "PostNord"
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Service Points
Get service points for a specific shipper and location.
requires authentication
Note: The "distance" field in the response is always in meters. Depending on the carrier, the value may reflect route distance (driving/walking) or direct distance.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/service-points';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipper_alias' => 'PNMC',
'address' => [
'country' => 'SE',
'zipcode' => '11253',
],
'limit' => 10,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/service-points" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipper_alias\": \"PNMC\",
\"address\": {
\"country\": \"SE\",
\"zipcode\": \"11253\"
},
\"limit\": 10
}"
const url = new URL(
"https://app.packflow.se/api/v1/service-points"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipper_alias": "PNMC",
"address": {
"country": "SE",
"zipcode": "11253"
},
"limit": 10
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/service-points'
payload = {
"shipper_alias": "PNMC",
"address": {
"country": "SE",
"zipcode": "11253"
},
"limit": 10
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
[
{
"id": "123456",
"token": null,
"type": "servicePoint",
"name": "Service Point Name",
"distance": 350
"address": {
"street": "Example Street 1",
"city": "Stockholm",
"zipcode": "11253",
"country": "SE"
},
"coordinate": {
"latitude": 59.3293,
"longitude": 18.0686
},
},
{
"id": "789012",
"token": null,
"type": "locker",
"name": "Another Service Point",
"distance": 1200
"address": {
"street": "Second Street 2",
"city": "Stockholm",
"zipcode": "11253",
"country": "SE"
},
"coordinate": {
"latitude": 59.334,
"longitude": 18.07
},
}
]
Example response (404):
{
"message": "Not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Settings
APIs for managing settings
Get account connections
requires authentication
Retrieves all existing account connections for the authenticated user's active account.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/settings/connections';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/settings/connections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/settings/connections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/settings/connections'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"data": [
{
"id": 1,
"account_id": 123,
"platform_id": 456,
"alias": "My Store",
"platform_name": "Shopify",
"settings": [
{
"id": 789,
"key": "api_key",
"type": "string",
"value": "xxxxx"
}
]
}
]
}
Example response (403, Unauthorized):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Shipments
APIs for managing shipments
Get items for picking tab
requires authentication
Returns shipment items with order item details needed for the picking interface. Items are sorted in an optimized picking order using the following rules:
- Items are primarily sorted by shelf location:
- Items with shelf locations come before items without locations
- Shelf locations are sorted alphabetically by letter (A-Z) first
- Within the same letter, locations are sorted numerically (A1, A2, A10)
- For items without shelf locations or with identical shelf locations:
- Items are sorted by SKU
- If SKUs are identical, items are sorted by title
Only returns items from shipments that:
- Are assigned to the authenticated user
- Have not been sent
- Are in PICK status
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/picking/items';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/picking/items" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/picking/items"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/picking/items'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
[
{
"id": "8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3",
"sku": "ABC123",
"title": "Test Product",
"shelf": "A12",
"quantity": 2,
"picked_quantity": 0,
"weight": 500,
"order_shipment_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shop_order_id": "1001",
"shop_order_id_alias": "ALIAS-1001",
"bin": "A"
}
]
Example response (200, No items to pick):
[]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
string
The unique identifier of the item.
sku
string
The SKU of the item.
title
string
The title/name of the item.
shelf
string
The shelf location of the item.
quantity
integer
The total quantity to pick.
picked_quantity
integer
The quantity already picked.
weight
integer
The weight of the item in grams.
order_shipment_id
string
The ID of the associated shipment.
shop_order_id
string
The original shop order ID.
shop_order_id_alias
string
The alias of the shop order ID.
bin
string
The assigned picking bin.
Update picking progress for items
requires authentication
Updates the picked quantity for a shipment item during the picking process. This endpoint allows incrementally updating the picking progress or resetting it. When an item is fully picked, the system will automatically:
- Update the item's picked quantity and timestamp
- Check if all items in the shipment are picked
- Update the shipment and order status to PACK if all items are picked
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/picking/progress';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'item_id' => '"8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3"',
'picked_quantity' => 2,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/picking/progress" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"item_id\": \"\\\"8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3\\\"\",
\"picked_quantity\": 2
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/picking/progress"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"item_id": "\"8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3\"",
"picked_quantity": 2
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/picking/progress'
payload = {
"item_id": "\"8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3\"",
"picked_quantity": 2
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success"
}
Example response (404, Item not found or belongs to different account):
{
"message": "Item not found"
}
Example response (422, Picked quantity exceeds available quantity):
{
"message": "Cannot pick more than available quantity"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Get shipments for picking and packing tabs
requires authentication
Returns active shipments that are in either PICK or PACK status, with minimal data needed for the picking and packing interfaces. Shipments are ordered by creation date (newest first) and include their associated receiver details and items.
Only returns shipments that:
- Belong to the authenticated user's account
- Have not been sent
- Are in either PICK or PACK status
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/pickpack';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/pickpack" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/pickpack"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/pickpack'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
[
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"status": "PICK",
"receiver": {
"firstname": "John",
"lastname": "Doe",
"company_name": "ACME Corp",
"address": "123 Main St"
},
"items": [
{
"id": "8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3",
"sku": "ABC123",
"title": "Test Product",
"quantity": 2,
"picked_quantity": 0
}
],
"shop_order_id_alias": "#1001"
}
]
Example response (200, No active shipments found):
[]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
string
The unique identifier of the shipment.
status
string
The current status of the shipment (PICK or PACK).
receiver
object
The receiver's details.
firstname
string
The receiver's first name.
lastname
string
The receiver's last name.
company_name
string
The receiver's company name.
address
string
The delivery address.
items
string[]
The items in the shipment.
id
string
The unique identifier of the item.
sku
string
The SKU of the item.
title
string
The title/name of the item.
quantity
integer
The total quantity to pick.
picked_quantity
integer
The quantity already picked.
shop_order_id_alias
string
The user-friendly display version of the order id.
Get sent shipments
requires authentication
Returns a paginated list of shipments that have been sent/delivered. Results are ordered by sent date in descending order (most recent first). Each shipment includes its receiver details and associated items.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/sent/nihil';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'page' => 1,
'per_page' => 100,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/sent/nihil" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"page\": 1,
\"per_page\": 100
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/sent/nihil"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"page": 1,
"per_page": 100
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/sent/nihil'
payload = {
"page": 1,
"per_page": 100
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (200):
{
"shipments": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"sent_date": "2024-03-15 14:30:00",
"receiver": {
"firstname": "John",
"lastname": "Doe",
...
},
"items": [
{
"sku": "SKU123",
"title": "Product Name",
...
}
],
...
}
],
"total": 150,
"page": 1,
"per_page": 100,
"total_pages": 2
}
Example response (200, No sent shipments found):
{
"shipments": [],
"total": 0,
"page": 1,
"per_page": 100,
"total_pages": 0
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
shipments
object[]
List of sent shipments with their items and receiver details.
total
integer
Total number of sent shipments.
page
integer
Current page number.
per_page
integer
Number of shipments per page.
total_pages
integer
Total number of pages.
Search sent shipments
requires authentication
Searches for delivered shipments based on tracking numbers, order IDs, or receiver information. Returns shipments that match the search query in any of the following fields:
- Tracking numbers
- Shop order ID
- Shop order ID alias
- Receiver email
- Receiver phone/cellphone
- Receiver name (first name, last name)
- Receiver company name
Results are ordered by sent date in descending order (most recent first).
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/search/john@example.com';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/search/john@example.com" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/search/john@example.com"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/search/john@example.com'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"shipments": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"tracking_numbers": "UU039810242SE",
"shop_order_id": "1001",
"shop_order_id_alias": "#1001",
"sent_date": "2024-03-15 14:30:00",
"receiver": {
"firstname": "John",
"lastname": "Doe",
"email": "john@example.com",
...
},
"items": [
{
"sku": "SKU123",
"title": "Product Name",
...
}
],
...
}
],
"total": 1
}
Example response (200, No matches found):
{
"shipments": [],
"total": 0
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipments
object[]
List of matching shipments with their items.
total
integer
Total number of matching shipments found.
Create shipment without booking
requires authentication
Creates a shipment for one or more orders without booking freight or generating labels. When a shipment is created:
- The order status is updated to PICK or PACK based on the status parameter
- A ShipmentCreatedEvent is dispatched
- The shipment inherits properties from the order
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/create/quae';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/create/quae" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "[
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\"
]"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/create/quae"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c"
];
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/create/quae'
payload = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c"
]
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"message": "success",
"shipments": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"order_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shipper_alias": "PNVB",
...
}
]
}
Example response (403):
{
"message": "Account is inactive"
}
Example response (404):
{
"message": "Order not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipments
string[]
The created shipments.
Update shipments status to PACK
requires authentication
Updates the status of shipments and their items to PACK status. This endpoint is used to mark shipments as picked. It will:
- Update the shipment status to PACK
- Update the order status to PACK
- Set the picked_quantity equal to quantity for all items
- Record the picking completion time and picker user
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/picked';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipment_ids' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
'256cb70d-945f-4b70-ab23-88d02d24ed8d',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/picked" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipment_ids\": [
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"256cb70d-945f-4b70-ab23-88d02d24ed8d\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/picked"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipment_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/picked'
payload = {
"shipment_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"shipments": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"status": "PACK",
"picked_at": "2024-03-15 14:30:00",
"picker_user_id": "abc123",
...
}
]
}
Example response (200, No matching shipments found):
{
"message": "No shipments were updated",
"shipments": []
}
Example response (500, Update failed):
{
"message": "Failed to update shipments",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipments
object[]
List of updated shipments.
Get optimized picking groups
requires authentication
Groups shipments that have matching SKUs for optimized picking
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/assign-optimized';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipment_ids' => [
'4f00683d-ccd1-37d7-a8b7-ce033749310c',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/assign-optimized" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipment_ids\": [
\"4f00683d-ccd1-37d7-a8b7-ce033749310c\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/assign-optimized"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/assign-optimized'
payload = {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated",
"error": "Unauthenticated.",
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 87,
"function": "unauthenticated",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 61,
"function": "authenticate",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{},
"sanctum"
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::handle():25}",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 25,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php",
"line": 13,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\FlushEventsMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php",
"line": 45,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestIpMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php",
"line": 31,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
"line": 79,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Tracing\\Middleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 236,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 229,
"function": "callLaravelRoute",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 103,
"function": "makeApiCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 39,
"function": "makeResponseCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"POST"
],
"uri": "api/v1/shipments/assign-optimized",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get optimized picking groups",
"description": "Groups shipments that have matching SKUs for optimized picking",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": {
"shipment_ids": {
"custom": [],
"name": "shipment_ids",
"description": "Must be a valid UUID.",
"required": true,
"example": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
],
"type": "string[]",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanBodyParameters": {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
},
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer P63hdk54e8vgcEVDb1a6Zfa"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "assignOptimized",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 466,
"function": "__invoke",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"POST"
],
"uri": "api/v1/shipments/assign-optimized",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get optimized picking groups",
"description": "Groups shipments that have matching SKUs for optimized picking",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": {
"shipment_ids": {
"custom": [],
"name": "shipment_ids",
"description": "Must be a valid UUID.",
"required": true,
"example": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
],
"type": "string[]",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanBodyParameters": {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
},
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer P63hdk54e8vgcEVDb1a6Zfa"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "assignOptimized",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 392,
"function": "iterateThroughStrategies",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
"responses",
{
"custom": [],
"httpMethods": [
"POST"
],
"uri": "api/v1/shipments/assign-optimized",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get optimized picking groups",
"description": "Groups shipments that have matching SKUs for optimized picking",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": {
"shipment_ids": {
"custom": [],
"name": "shipment_ids",
"description": "Must be a valid UUID.",
"required": true,
"example": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
],
"type": "string[]",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanBodyParameters": {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
},
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer P63hdk54e8vgcEVDb1a6Zfa"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "assignOptimized",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
},
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 93,
"function": "fetchResponses",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"POST"
],
"uri": "api/v1/shipments/assign-optimized",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get optimized picking groups",
"description": "Groups shipments that have matching SKUs for optimized picking",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json"
},
"urlParameters": [],
"cleanUrlParameters": [],
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": {
"shipment_ids": {
"custom": [],
"name": "shipment_ids",
"description": "Must be a valid UUID.",
"required": true,
"example": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
],
"type": "string[]",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanBodyParameters": {
"shipment_ids": [
"4f00683d-ccd1-37d7-a8b7-ce033749310c"
]
},
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer P63hdk54e8vgcEVDb1a6Zfa"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "assignOptimized",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 186,
"function": "processRoute",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"uri": "api/v1/shipments/assign-optimized",
"methods": [
"POST"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@assignOptimized",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": [],
"parameterNames": [],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
"line": 41,
"function": "{closure:Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp::extractEndpointsInfoFromLaravelApp():185}",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
"line": 59,
"function": "render",
"class": "Illuminate\\Console\\View\\Components\\Task",
"type": "->",
"args": [
"<options=bold>[<fg=cyan>POST</>]</> api/v1/shipments/assign-optimized",
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 183,
"function": "__call",
"class": "Illuminate\\Console\\View\\Components\\Factory",
"type": "->",
"args": [
"task",
[
"[<fg=cyan>POST</>] api/v1/shipments/assign-optimized",
{}
]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 73,
"function": "extractEndpointsInfoFromLaravelApp",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
],
[],
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 51,
"function": "extractEndpointsInfoAndWriteToDisk",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
{},
true
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
"line": 55,
"function": "get",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 36,
"function": "handle",
"class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Util.php",
"line": 43,
"function": "{closure:Illuminate\\Container\\BoundMethod::call():35}",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 96,
"function": "unwrapIfClosure",
"class": "Illuminate\\Container\\Util",
"type": "::",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 35,
"function": "callBoundMethod",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Container.php",
"line": 799,
"function": "call",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
[],
null
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 211,
"function": "call",
"class": "Illuminate\\Container\\Container",
"type": "->",
"args": [
[
{},
"handle"
]
]
},
{
"file": "/app/vendor/symfony/console/Command/Command.php",
"line": 341,
"function": "execute",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 180,
"function": "run",
"class": "Symfony\\Component\\Console\\Command\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 1117,
"function": "run",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 356,
"function": "doRunCommand",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 195,
"function": "doRun",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
"line": 198,
"function": "run",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/artisan",
"line": 35,
"function": "handle",
"class": "Illuminate\\Foundation\\Console\\Kernel",
"type": "->",
"args": [
{},
{}
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Assign shipments to user for picking
requires authentication
Assigns multiple shipments to the authenticated user for picking. The method checks if the user already has ongoing pickings and assigns bin locations (A-Z, then A2-Z2, etc.) to each shipment in the batch.
Each batch of assigned shipments shares the same batch date for coordinated picking. Bins are assigned sequentially to help organize the physical picking process.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/assign';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipment_ids' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
'256cb70d-945f-4b70-ab23-88d02d24ed8d',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/assign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipment_ids\": [
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"256cb70d-945f-4b70-ab23-88d02d24ed8d\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/assign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipment_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/assign'
payload = {
"shipment_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"shipments": [
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"bin": "A",
"batch_date": "2024-03-15 14:30:00",
...
},
{
"id": "256cb70d-945f-4b70-ab23-88d02d24ed8d",
"bin": "B",
"batch_date": "2024-03-15 14:30:00",
...
}
]
}
Example response (400):
{
"message": "You have already a started picking batch. Please complete them before starting new ones.",
"shipments": []
}
Example response (404):
{
"message": "No shipments found",
"shipments": []
}
Example response (500):
{
"message": "Failed to assign shipments",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipments
object[]
List of updated shipments with assigned bins and batch dates.
Book freight for existing shipments
requires authentication
Books freight for one or more existing shipments. Creates shipping labels and tracking numbers.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/book-freight';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipmentIds' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/book-freight" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipmentIds\": [
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/book-freight"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipmentIds": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/book-freight'
payload = {
"shipmentIds": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201, Success):
{
"message": "success",
"jobs": 1,
"label": "https://example.com/label.pdf",
"delivery_note": "https://example.com/delivery.pdf",
"customs_declaration": "https://example.com/customs.pdf",
"shipment_list": "https://example.com/list.pdf",
"carrier": "PostNord",
"shipper_alias": "PNVB",
"service_name": "Varubrev",
"tracking_numbers": [
"UU039810242SE"
],
"tracking_link": "https://example.com/track"
}
Example response (400, Invalid Request):
{
"message": "No shipment IDs provided"
}
Example response (403, Limit Exceeded):
{
"message": "Max free limit reached"
}
Example response (404, Not Found):
{
"message": "Shipment not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get shipments by order IDs
requires authentication
Retrieves shipments that match the provided order IDs and belong to the authenticated user's account. Results are:
- Limited to 500 shipments maximum
- Sorted by batch date (newest first)
- Further sorted by shop order ID (descending) for consistent ordering
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/byorderid';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'order_ids' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
'156cb70d-945f-4b70-ab23-88d02d24ed2a',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/byorderid" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"order_ids\": [
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"156cb70d-945f-4b70-ab23-88d02d24ed2a\"
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/byorderid"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"order_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"156cb70d-945f-4b70-ab23-88d02d24ed2a"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/byorderid'
payload = {
"order_ids": [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"156cb70d-945f-4b70-ab23-88d02d24ed2a"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
[
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"account_id": "acc_123",
"order_id": "ord_456",
"batch_date": "2024-03-15 14:30:00",
"shop_order_id": "SO-123456",
...
}
]
Example response (200, No matching shipments found):
[]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
string
The unique identifier of the shipment
account_id
string
The account ID the shipment belongs to
order_id
string
The associated order ID
batch_date
string
The date the shipment was batched
shop_order_id
string
The shop's order identifier
Book shipment
requires authentication
Book a shipment directly without creating the order first. Creates a complete order with items, books freight, and generates shipping labels. When successful:
- Creates shipping labels and documents
- Generates tracking numbers
- Processes any order rules
- Optionally delivers the shipment if requested
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/book';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shop_order_id' => '5373921919213',
'shop_order_id_alias' => '#1001',
'source_shipper_id' => '123456',
'parcels' => 1,
'amount' => 100.0,
'items_amount' => 90.0,
'currency_iso' => 'SEK',
'weight' => 1250,
'order_date' => '2021-12-24 12:00:00',
'shipper_alias' => 'PNVB',
'incoterms' => 'DAP',
'reference' => 'Free samples',
'agent_id' => 'SE-204500',
'package_size_id' => 1,
'deliver' => true,
'receiver' => [
'firstname' => 'John',
'lastname' => 'Doe',
'company_name' => 'John Doe AB',
'address' => 'Storgatan 1',
'address2' => 'Lgh 123',
'zipcode' => '12345',
'city' => 'Stockholm',
'country_iso' => 'SE',
'email' => 'john@doe.com',
'cellphone' => '0701234567',
'phone' => '081234567',
],
'sender' => [
'firstname' => 'Jane',
'lastname' => 'Smith',
'company_name' => 'Jane Smith AB',
'address' => 'Lillgatan 2',
'address2' => 'Lgh 456',
'zipcode' => '54321',
'city' => 'Gothenburg',
'country_iso' => 'SE',
'email' => 'jane@smith.com',
'cellphone' => '0707654321',
'phone' => '087654321',
],
'items' => [
[
'sku' => '123456',
'title' => 'Product name',
'weight' => 250,
'price' => 50.0,
'origin_country_iso' => 'CN',
'hs_code' => '123456',
'length' => 100,
'width' => 100,
'height' => 100,
'quantity' => 1,
'shelf' => 'A1',
'colli' => 1,
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/book" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shop_order_id\": \"5373921919213\",
\"shop_order_id_alias\": \"#1001\",
\"source_shipper_id\": \"123456\",
\"parcels\": 1,
\"amount\": 100,
\"items_amount\": 90,
\"currency_iso\": \"SEK\",
\"weight\": 1250,
\"order_date\": \"2021-12-24 12:00:00\",
\"shipper_alias\": \"PNVB\",
\"incoterms\": \"DAP\",
\"reference\": \"Free samples\",
\"agent_id\": \"SE-204500\",
\"package_size_id\": 1,
\"deliver\": true,
\"receiver\": {
\"firstname\": \"John\",
\"lastname\": \"Doe\",
\"company_name\": \"John Doe AB\",
\"address\": \"Storgatan 1\",
\"address2\": \"Lgh 123\",
\"zipcode\": \"12345\",
\"city\": \"Stockholm\",
\"country_iso\": \"SE\",
\"email\": \"john@doe.com\",
\"cellphone\": \"0701234567\",
\"phone\": \"081234567\"
},
\"sender\": {
\"firstname\": \"Jane\",
\"lastname\": \"Smith\",
\"company_name\": \"Jane Smith AB\",
\"address\": \"Lillgatan 2\",
\"address2\": \"Lgh 456\",
\"zipcode\": \"54321\",
\"city\": \"Gothenburg\",
\"country_iso\": \"SE\",
\"email\": \"jane@smith.com\",
\"cellphone\": \"0707654321\",
\"phone\": \"087654321\"
},
\"items\": [
{
\"sku\": \"123456\",
\"title\": \"Product name\",
\"weight\": 250,
\"price\": 50,
\"origin_country_iso\": \"CN\",
\"hs_code\": \"123456\",
\"length\": 100,
\"width\": 100,
\"height\": 100,
\"quantity\": 1,
\"shelf\": \"A1\",
\"colli\": 1
}
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/book"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shop_order_id": "5373921919213",
"shop_order_id_alias": "#1001",
"source_shipper_id": "123456",
"parcels": 1,
"amount": 100,
"items_amount": 90,
"currency_iso": "SEK",
"weight": 1250,
"order_date": "2021-12-24 12:00:00",
"shipper_alias": "PNVB",
"incoterms": "DAP",
"reference": "Free samples",
"agent_id": "SE-204500",
"package_size_id": 1,
"deliver": true,
"receiver": {
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Storgatan 1",
"address2": "Lgh 123",
"zipcode": "12345",
"city": "Stockholm",
"country_iso": "SE",
"email": "john@doe.com",
"cellphone": "0701234567",
"phone": "081234567"
},
"sender": {
"firstname": "Jane",
"lastname": "Smith",
"company_name": "Jane Smith AB",
"address": "Lillgatan 2",
"address2": "Lgh 456",
"zipcode": "54321",
"city": "Gothenburg",
"country_iso": "SE",
"email": "jane@smith.com",
"cellphone": "0707654321",
"phone": "087654321"
},
"items": [
{
"sku": "123456",
"title": "Product name",
"weight": 250,
"price": 50,
"origin_country_iso": "CN",
"hs_code": "123456",
"length": 100,
"width": 100,
"height": 100,
"quantity": 1,
"shelf": "A1",
"colli": 1
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/book'
payload = {
"shop_order_id": "5373921919213",
"shop_order_id_alias": "#1001",
"source_shipper_id": "123456",
"parcels": 1,
"amount": 100,
"items_amount": 90,
"currency_iso": "SEK",
"weight": 1250,
"order_date": "2021-12-24 12:00:00",
"shipper_alias": "PNVB",
"incoterms": "DAP",
"reference": "Free samples",
"agent_id": "SE-204500",
"package_size_id": 1,
"deliver": true,
"receiver": {
"firstname": "John",
"lastname": "Doe",
"company_name": "John Doe AB",
"address": "Storgatan 1",
"address2": "Lgh 123",
"zipcode": "12345",
"city": "Stockholm",
"country_iso": "SE",
"email": "john@doe.com",
"cellphone": "0701234567",
"phone": "081234567"
},
"sender": {
"firstname": "Jane",
"lastname": "Smith",
"company_name": "Jane Smith AB",
"address": "Lillgatan 2",
"address2": "Lgh 456",
"zipcode": "54321",
"city": "Gothenburg",
"country_iso": "SE",
"email": "jane@smith.com",
"cellphone": "0707654321",
"phone": "087654321"
},
"items": [
{
"sku": "123456",
"title": "Product name",
"weight": 250,
"price": 50,
"origin_country_iso": "CN",
"hs_code": "123456",
"length": 100,
"width": 100,
"height": 100,
"quantity": 1,
"shelf": "A1",
"colli": 1
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"message": "success",
"jobs": 1,
"label": "https://packflow-dev.s3.eu-north-1.amazonaws.com/local/labels/1/241201/label_0fe463fd-be5f-455d-b55f-a1fe3b4cea2a.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATBOENLEBS6RUF3MD%2F20241201%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Date=20241201T205152Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Signature=17deea4a975b688d76976ca397827244a3976278d83dcdfdfd9247b6cd0d1140",
"delivery_note": "https://packflow-dev.s3.eu-north-1.amazonaws.com/local/deliveryNote/1/deliveryNote_0fe463fd-be5f-455d-b55f-a1fe3b4cea2a.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATBOENLEBS6RUF3MD%2F20241201%2Feu-north-1%2Fs3%2Faws4_request&X-Amz-Date=20241201T205153Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Signature=804e68bfe6a81decea7c7a51c69540c53b6c845aae4b5a0b34b52db0209f10e5",
"customs_declaration": null,
"shipment_list": null,
"carrier": "Schenker",
"shipper_alias": "SCHPAR",
"service_name": "Parcel Företag",
"tracking_numbers": [
"1005485816"
],
"tracking_link": "https://www.dbschenker.com/app/tracking-public/?refNumber=1005485816",
"order": {
"id": "f05d1a1f-9e08-4e02-b85f-874bda84845e",
"complete": 1,
"receiver_id": "8cbbf184-230b-4429-8c45-1aab4d2ecfbc",
"sender_id": "e76ed476-6854-44a4-8134-531521086a68",
"account_id": 1,
"account_connection_id": null,
"user_id": 1,
"shop_order_id": "5373921919213",
"shop_order_id_alias": "#1001",
"source_shipper_id": "123456",
"parcels": 2,
"amount": 100,
"items_amount": 150,
"currency_iso": "SEK",
"country_iso": "SE",
"weight": 1550,
"order_date": "2024-10-28 22:41:00",
"shipper_alias": "SCHPAR",
"booked": 0,
"reference": "Free samples",
"package_size_id": 6,
"incoterms": "DAP",
"updated_at": "2024-12-01T20:51:46.000000Z",
"created_at": "2024-12-01T20:51:46.000000Z",
"items": [
{
"id": "ae8c2dd3-b62f-4bdc-aa70-4cfeb3a3c278",
"order_id": "f05d1a1f-9e08-4e02-b85f-874bda84845e",
"sku": null,
"title": "Samsung Galaxy S20",
"weight": 300,
"price": 50,
"origin_country_iso": "CN",
"hs_code": null,
"length": null,
"width": null,
"height": null,
"quantity": 1,
"origin_quantity": null,
"shelf": null,
"row_id": null,
"colli": 1,
"created_at": "2024-12-01T20:51:46.000000Z",
"updated_at": "2024-12-01T20:51:46.000000Z"
},
{
"id": "e4e3ef23-f664-4ab7-a012-67c991e60efe",
"order_id": "f05d1a1f-9e08-4e02-b85f-874bda84845e",
"sku": "IPHONE-12",
"title": "iPhone 12",
"weight": 1250,
"price": 100,
"origin_country_iso": "CN",
"hs_code": null,
"length": null,
"width": null,
"height": null,
"quantity": 1,
"origin_quantity": null,
"shelf": null,
"row_id": null,
"colli": 2,
"created_at": "2024-12-01T20:51:46.000000Z",
"updated_at": "2024-12-01T20:51:46.000000Z"
}
]
},
"shipment": {
"id": "0fe463fd-be5f-455d-b55f-a1fe3b4cea2a",
"order_id": "f05d1a1f-9e08-4e02-b85f-874bda84845e",
"shipper_alias": "SCHPAR",
"tracking_number": "1005485816",
"sender_id": "e76ed476-6854-44a4-8134-531521086a68",
"receiver_id": "8cbbf184-230b-4429-8c45-1aab4d2ecfbc",
"batch_date": "2024-12-01 20:51:46",
"incoterms": "DAP",
"service_code": null,
"service_name": "Parcel Företag",
"additional_services": null,
"created_at": "2024-12-01T20:51:46.000000Z",
"updated_at": "2024-12-01T20:51:53.000000Z",
"type": "shipment"
},
"parcels": [
{
"id": 133,
"order_shipment_id": "0fe463fd-be5f-455d-b55f-a1fe3b4cea2a",
"colli": 1,
"weight": 320,
"package_weight": 20,
"reference": null,
"dimensions": {
"width": 200,
"height": 200,
"length": 300
},
"package_size_id": 5,
"tracking_number": "573313433000734888",
"created_at": "2025-06-04T09:00:50.000000Z",
"updated_at": "2025-06-04T09:00:51.000000Z"
},
{
"id": 134,
"order_shipment_id": "0fe463fd-be5f-455d-b55f-a1fe3b4cea2a",
"colli": 2,
"weight": 1270,
"package_weight": 20,
"reference": null,
"dimensions": {
"width": 200,
"height": 200,
"length": 300
},
"package_size_id": 5,
"tracking_number": "573313433000734890",
"created_at": "2025-06-04T09:00:50.000000Z",
"updated_at": "2025-06-04T09:00:51.000000Z"
}
]
}
Example response (400):
{
"message": "Invalid JSON payload"
}
Example response (403):
{
"message": "Forbidden"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
label
string
The URL to the shipping label.
delivery_note
string
The URL to the delivery note.
customs_declaration
string
The URL to the customs declaration.
shipment_list
string
The URL to the shipment list.
carrier
string
The carrier of the shipment.
shipper_alias
string
The alias of the shipper.
service_name
string
The name of the service.
tracking_numbers
string[]
The tracking numbers of the shipment.
booking_id
string
The booking id of the shipment.
tracking_link
string
The URL to the tracking page.
order
object
The created order object.
shipment
object
The created shipment object.
parcels
object[]
The created parcels objects.
Create return shipment
requires authentication
Creates a return shipment from an existing shipment. The return shipment will be created with the specified shipping method and can optionally email the return label to a specified email address.
If a non-return shipping method is used, the sender and receiver addresses will be swapped. The return shipment will be booked immediately and shipping label, documents and tracking numbers will be created.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/return';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'original_shipment_id' => '156cb70d-945f-4b70-ab23-88d02d24ed8c',
'shipper_alias' => 'PNVBR',
'email_label' => 'customer@example.com',
'reason' => 'velit',
'resolution' => 'return',
'parcels' => 80,
'weight' => 11,
'qr_code' => true,
'receiver_address' => [
'id' => 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'company_name' => 'Returns Center AB',
'firstname' => 'John',
'lastname' => 'Doe',
'address' => 'Returngatan 1',
'address2' => 'Floor 2',
'zipcode' => '12345',
'city' => 'Stockholm',
'state' => 'Stockholm',
'country_iso' => 'SE',
'email' => 'returns@example.com',
'cellphone' => '+46701234567',
'phone' => '+4687654321',
],
'return_items' => [
[
'id' => 'omnis',
'quantity' => 26,
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/return" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"original_shipment_id\": \"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"shipper_alias\": \"PNVBR\",
\"email_label\": \"customer@example.com\",
\"reason\": \"velit\",
\"resolution\": \"return\",
\"parcels\": 80,
\"weight\": 11,
\"qr_code\": true,
\"receiver_address\": {
\"id\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",
\"company_name\": \"Returns Center AB\",
\"firstname\": \"John\",
\"lastname\": \"Doe\",
\"address\": \"Returngatan 1\",
\"address2\": \"Floor 2\",
\"zipcode\": \"12345\",
\"city\": \"Stockholm\",
\"state\": \"Stockholm\",
\"country_iso\": \"SE\",
\"email\": \"returns@example.com\",
\"cellphone\": \"+46701234567\",
\"phone\": \"+4687654321\"
},
\"return_items\": [
{
\"id\": \"omnis\",
\"quantity\": 26
}
]
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/return"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"original_shipment_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shipper_alias": "PNVBR",
"email_label": "customer@example.com",
"reason": "velit",
"resolution": "return",
"parcels": 80,
"weight": 11,
"qr_code": true,
"receiver_address": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"company_name": "Returns Center AB",
"firstname": "John",
"lastname": "Doe",
"address": "Returngatan 1",
"address2": "Floor 2",
"zipcode": "12345",
"city": "Stockholm",
"state": "Stockholm",
"country_iso": "SE",
"email": "returns@example.com",
"cellphone": "+46701234567",
"phone": "+4687654321"
},
"return_items": [
{
"id": "omnis",
"quantity": 26
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/return'
payload = {
"original_shipment_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shipper_alias": "PNVBR",
"email_label": "customer@example.com",
"reason": "velit",
"resolution": "return",
"parcels": 80,
"weight": 11,
"qr_code": true,
"receiver_address": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"company_name": "Returns Center AB",
"firstname": "John",
"lastname": "Doe",
"address": "Returngatan 1",
"address2": "Floor 2",
"zipcode": "12345",
"city": "Stockholm",
"state": "Stockholm",
"country_iso": "SE",
"email": "returns@example.com",
"cellphone": "+46701234567",
"phone": "+4687654321"
},
"return_items": [
{
"id": "omnis",
"quantity": 26
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"message": "Return shipment created successfully",
"shipment": {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shipper_alias": "PNVBR",
...
},
"label": "https://...pdf",
"delivery_note": "https://...pdf",
"customs_declaration": "https://...pdf",
"tracking_numbers": ["UU039810242SE"],
"tracking_link": "https://..."
}
Example response (400):
{
"message": "Validation failed",
"errors": {
"original_shipment_id": [
"The original shipment id field is required"
]
}
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (500):
{
"message": "Failed to create return shipment",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipment
object
The created return shipment object.
label
string
The URL to the shipping label.
delivery_note
string
The URL to the delivery note.
customs_declaration
string
The URL to the customs declaration.
tracking_numbers
string[]
The tracking numbers for the return shipment.
tracking_link
string
The URL to track the return shipment.
Duplicate an existing shipment
requires authentication
Creates an exact copy of an existing shipment with the following changes:
- Generates a new unique ID
- Resets booking status (booked = 0)
- Resets printing status (printed = 0)
- Clears bin assignment
- Clears sent date
- Clears tracking numbers
The duplicated shipment inherits all other properties from the original shipment including:
- Receiver and sender information
- Items and their quantities
- Shipper alias and settings
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/duplicate';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipment_id' => '156cb70d-945f-4b70-ab23-88d02d24ed8c',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/duplicate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipment_id\": \"156cb70d-945f-4b70-ab23-88d02d24ed8c\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/duplicate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipment_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/duplicate'
payload = {
"shipment_id": "156cb70d-945f-4b70-ab23-88d02d24ed8c"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"message": "Shipment duplicated successfully",
"shipment": {
"id": "256cb70d-945f-4b70-ab23-88d02d24ed9d",
"account_id": "acc_123",
"shipper_alias": "PNVB",
"booked": 0,
"printed": 0,
"bin": null,
"sent_date": null,
"tracking_numbers": null
}
}
Example response (400):
{
"message": "Validation failed",
"errors": {
"shipment_id": [
"The shipment id field is required."
]
}
}
Example response (404, Shipment not found or belongs to different account):
{
"message": "Shipment not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Deliver shipments
requires authentication
Marks one or more shipments as delivered and updates their corresponding orders. The delivery process is handled asynchronously in batches.
The delivery status will be updated in both the local system and the connected platform (e.g. Shopify, Fortnox). Events will be dispatched to notify relevant systems of the delivery status change.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/deliver';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'156cb70d-945f-4b70-ab23-88d02d24ed8c',
'256cb70d-945f-4b70-ab23-88d02d24ed8d',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/deliver" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "[
\"156cb70d-945f-4b70-ab23-88d02d24ed8c\",
\"256cb70d-945f-4b70-ab23-88d02d24ed8d\"
]"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/deliver"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
];
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/deliver'
payload = [
"156cb70d-945f-4b70-ab23-88d02d24ed8c",
"256cb70d-945f-4b70-ab23-88d02d24ed8d"
]
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "complete",
"jobs": 0
}
Example response (201):
{
"message": "success",
"jobs": 2
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
jobs
integer
Number of delivery jobs queued.
Delete shipments
requires authentication
Deletes one or more shipments by their IDs. When a shipment is deleted:
- The associated order's status is reset to NEW
- A ShipmentDeletedEvent is dispatched
- The shipment is permanently removed
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request DELETE \
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200, Delete successful):
{
"message": "success"
}
Example response (403, User does not have access to one or more shipments):
{
"message": "Forbidden"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
Get shipment
requires authentication
Returns a shipment by id.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"receiver": {
"id": "...",
"firstname": "John",
"lastname": "Doe",
...
},
"items": [
{
"id": "...",
"sku": "123",
"title": "Product",
...
}
],
...
}
Example response (404, Shipment not found):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create shipment item
requires authentication
Adds a new item to a shipment, pre-assigned to a specific colli (parcel). A matching OrderItem is created on the underlying order so analytics, packlists, and picklists stay consistent. Recalculates the shipment's total weight after creation.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3/items';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request POST \
"https://app.packflow.se/api/v1/shipments/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3/items" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3/items"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3/items'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('POST', url, headers=headers)
response.json()Example response (201):
{
"message": "success",
"item": {
"id": "...",
"colli": 1,
"quantity": 1
}
}
Example response (404):
{
"message": "Shipment not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update shipment item
requires authentication
Updates properties of a shipment item such as SKU, title, price, origin country, HS code, shelf location, weight, quantity, or colli number. If weight is updated, the total shipment weight will be automatically recalculated.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'sku' => 'SKU123',
'title' => 'Blue Widget',
'price' => '19.99',
'origin_country_iso' => 'CN',
'hs_code' => '847130',
'shelf' => 'A12',
'weight' => 500,
'quantity' => 2,
'picked_quantity' => 1,
'colli' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PATCH \
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"sku\": \"SKU123\",
\"title\": \"Blue Widget\",
\"price\": \"19.99\",
\"origin_country_iso\": \"CN\",
\"hs_code\": \"847130\",
\"shelf\": \"A12\",
\"weight\": 500,
\"quantity\": 2,
\"picked_quantity\": 1,
\"colli\": 1
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sku": "SKU123",
"title": "Blue Widget",
"price": "19.99",
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3'
payload = {
"sku": "SKU123",
"title": "Blue Widget",
"price": "19.99",
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"item": {
"id": "8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3",
"sku": "SKU123",
"title": "Blue Widget",
"price": 19.99,
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
}
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Item not found"
}
Example response (422):
{
"message": "Invalid colli number. Cannot be greater than shipment parcels count."
}
Example response (500):
{
"message": "Failed to update item",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
item
object
The updated shipment item object.
Update shipment item
requires authentication
Updates properties of a shipment item such as SKU, title, price, origin country, HS code, shelf location, weight, quantity, or colli number. If weight is updated, the total shipment weight will be automatically recalculated.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'sku' => 'SKU123',
'title' => 'Blue Widget',
'price' => '19.99',
'origin_country_iso' => 'CN',
'hs_code' => '847130',
'shelf' => 'A12',
'weight' => 500,
'quantity' => 2,
'picked_quantity' => 1,
'colli' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PUT \
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"sku\": \"SKU123\",
\"title\": \"Blue Widget\",
\"price\": \"19.99\",
\"origin_country_iso\": \"CN\",
\"hs_code\": \"847130\",
\"shelf\": \"A12\",
\"weight\": 500,
\"quantity\": 2,
\"picked_quantity\": 1,
\"colli\": 1
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sku": "SKU123",
"title": "Blue Widget",
"price": "19.99",
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3'
payload = {
"sku": "SKU123",
"title": "Blue Widget",
"price": "19.99",
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"item": {
"id": "8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3",
"sku": "SKU123",
"title": "Blue Widget",
"price": 19.99,
"origin_country_iso": "CN",
"hs_code": "847130",
"shelf": "A12",
"weight": 500,
"quantity": 2,
"picked_quantity": 1,
"colli": 1
}
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Item not found"
}
Example response (422):
{
"message": "Invalid colli number. Cannot be greater than shipment parcels count."
}
Example response (500):
{
"message": "Failed to update item",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
item
object
The updated shipment item object.
Delete a shipment item
requires authentication
Removes an item from a shipment and recalculates the total shipment weight. The item will be permanently deleted and cannot be recovered. If the item has a weight, the shipment's total weight will be automatically adjusted to reflect the removal.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request DELETE \
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/items/8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"message": "success",
"shipment": {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"weight": 1500,
...
}
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Item not found"
}
Example response (500):
{
"message": "Failed to delete item",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipment
object
The updated shipment object with recalculated weight.
Update shipment
requires authentication
Updates a shipment's properties and its associated receiver address. The method accepts JSON payload containing shipment properties and optionally a receiver object for updating the delivery address.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'shipper_alias' => 'PNVB',
'reference' => '"Order #123"',
'weight' => 1000,
'parcels' => 2,
'receiver' => [
'firstname' => 'John',
'lastname' => 'Doe',
'company_name' => 'ACME Corp',
'address' => '"123 Main St"',
'address2' => '"Suite 456"',
'city' => 'Stockholm',
'state' => 'Stockholm',
'zipcode' => '"12345"',
'country_iso' => 'SE',
'email' => 'john@example.com',
'cellphone' => '"+46701234567"',
'customer_number' => '"CUST123"',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PATCH \
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"shipper_alias\": \"PNVB\",
\"reference\": \"\\\"Order #123\\\"\",
\"weight\": 1000,
\"parcels\": 2,
\"receiver\": {
\"firstname\": \"John\",
\"lastname\": \"Doe\",
\"company_name\": \"ACME Corp\",
\"address\": \"\\\"123 Main St\\\"\",
\"address2\": \"\\\"Suite 456\\\"\",
\"city\": \"Stockholm\",
\"state\": \"Stockholm\",
\"zipcode\": \"\\\"12345\\\"\",
\"country_iso\": \"SE\",
\"email\": \"john@example.com\",
\"cellphone\": \"\\\"+46701234567\\\"\",
\"customer_number\": \"\\\"CUST123\\\"\"
}
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"shipper_alias": "PNVB",
"reference": "\"Order #123\"",
"weight": 1000,
"parcels": 2,
"receiver": {
"firstname": "John",
"lastname": "Doe",
"company_name": "ACME Corp",
"address": "\"123 Main St\"",
"address2": "\"Suite 456\"",
"city": "Stockholm",
"state": "Stockholm",
"zipcode": "\"12345\"",
"country_iso": "SE",
"email": "john@example.com",
"cellphone": "\"+46701234567\"",
"customer_number": "\"CUST123\""
}
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c'
payload = {
"shipper_alias": "PNVB",
"reference": "\"Order #123\"",
"weight": 1000,
"parcels": 2,
"receiver": {
"firstname": "John",
"lastname": "Doe",
"company_name": "ACME Corp",
"address": "\"123 Main St\"",
"address2": "\"Suite 456\"",
"city": "Stockholm",
"state": "Stockholm",
"zipcode": "\"12345\"",
"country_iso": "SE",
"email": "john@example.com",
"cellphone": "\"+46701234567\"",
"customer_number": "\"CUST123\""
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"shipment": {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"shipper_alias": "PNVB",
"reference": "Order #123",
"weight": 1000,
"parcels": 2,
...
}
}
Example response (400):
{
"message": "Invalid JSON payload"
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (500):
{
"message": "Failed to update shipment",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipment
object
The updated shipment object.
Update or create parcel
requires authentication
Updates an existing parcel or creates a new one with the specified colli number. The parcel's weight can be set manually or will be calculated from its items if not specified. When using a package size, its dimensions and weight will be applied to the parcel unless overridden.
The shipment's total weight is automatically recalculated after the parcel is updated.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
],
'json' => [
'weight' => 1000,
'reference' => '"Box 1"',
'dimensions' => [
'length' => '300',
'width' => '200',
'height' => '100',
],
'package_size_id' => 1,
'tracking_number' => '"UU039810242SE"',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request PUT \
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"weight\": 1000,
\"reference\": \"\\\"Box 1\\\"\",
\"dimensions\": {
\"length\": \"300\",
\"width\": \"200\",
\"height\": \"100\"
},
\"package_size_id\": 1,
\"tracking_number\": \"\\\"UU039810242SE\\\"\"
}"
const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"weight": 1000,
"reference": "\"Box 1\"",
"dimensions": {
"length": "300",
"width": "200",
"height": "100"
},
"package_size_id": 1,
"tracking_number": "\"UU039810242SE\""
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1'
payload = {
"weight": 1000,
"reference": "\"Box 1\"",
"dimensions": {
"length": "300",
"width": "200",
"height": "100"
},
"package_size_id": 1,
"tracking_number": "\"UU039810242SE\""
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "success",
"parcel": {
"colli": 1,
"weight": 1000,
"reference": "Box 1",
"dimensions": {
"length": 300,
"width": 200,
"height": 100
},
"package_size_id": 1,
"tracking_number": "UU039810242SE",
...
},
"shipment": {
"weight": 2500,
"parcels": 3
}
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (422):
{
"message": "Cannot create parcel 3. The selected shipping method only allows a maximum of 2 parcels."
}
Example response (500):
{
"message": "Failed to update parcel",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
parcel
object
The updated parcel data.
shipment
object
Updated shipment weight and parcel count.
Get parcel data
requires authentication
Retrieves data for a specific parcel in a shipment. If the parcel doesn't exist in the database, but items are assigned to its colli number, a virtual parcel will be returned with the calculated weight from those items.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"message": "success",
"parcel": {
"colli": 1,
"weight": 1000,
"dimensions": {
"length": 30,
"width": 20,
"height": 10
},
"reference": "Box 1",
"package_size_id": 1,
"tracking_number": "UU039810242SE",
...
}
}
Example response (200, Virtual parcel with calculated weight):
{
"message": "success",
"parcel": {
"colli": 1,
"weight": 500
}
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (500):
{
"message": "Failed to get parcel data",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
parcel
object
The parcel data including weight, dimensions, and other attributes.
Get all parcels for a shipment
requires authentication
Retrieves all parcels associated with a shipment. Each parcel contains information about its weight, dimensions, tracking number, and other attributes. The parcels are returned in order of their colli numbers.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"message": "success",
"parcels": [
{
"colli": 1,
"weight": 1000,
"dimensions": {
"length": 30,
"width": 20,
"height": 10
},
"reference": "Box 1",
"package_size_id": 1,
"tracking_number": "UU039810242SE",
...
},
{
"colli": 2,
"weight": 500,
...
}
]
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (500):
{
"message": "Failed to get parcels",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
parcels
object[]
List of parcels in the shipment.
Delete parcel
requires authentication
Deletes a parcel from a shipment and reorganizes the remaining parcels. When a parcel is deleted:
- All items in the deleted parcel are moved to the previous parcel
- All parcels with higher colli numbers are renumbered
- The shipment's total weight and parcel count are recalculated
The first parcel (colli 1) cannot be deleted.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/2';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request DELETE \
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/2" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/2"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/156cb70d-945f-4b70-ab23-88d02d24ed8c/parcels/2'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"message": "success",
"shipment": {
"id": "156cb70d-945f-4b70-ab23-88d02d24ed8c",
"weight": 1500,
"parcels": 2,
...
},
"parcels": [
{
"colli": 1,
"weight": 1000,
...
},
{
"colli": 2,
"weight": 500,
...
}
]
}
Example response (403):
{
"message": "Forbidden"
}
Example response (404):
{
"message": "Shipment not found"
}
Example response (404):
{
"message": "Parcel not found"
}
Example response (422):
{
"message": "Cannot delete the first parcel"
}
Example response (500):
{
"message": "Failed to delete parcel",
"error": "Error message"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
message
string
Status message.
shipment
object
The updated shipment object with recalculated weight and parcel count.
parcels
object[]
List of remaining parcels after deletion and renumbering.
Get tracking information for a shipment
requires authentication
Returns tracking events and details for a specific shipment
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shipments/veritatis/tracking';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shipments/veritatis/tracking" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shipments/veritatis/tracking"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shipments/veritatis/tracking'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated",
"error": "Unauthenticated.",
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 87,
"function": "unauthenticated",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 61,
"function": "authenticate",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
[
"sanctum"
]
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{},
"sanctum"
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::handle():25}",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
"line": 25,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php",
"line": 13,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\FlushEventsMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php",
"line": 45,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestIpMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php",
"line": 31,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Http\\SetRequestMiddleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
"line": 79,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Sentry\\Laravel\\Tracing\\Middleware",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 236,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 229,
"function": "callLaravelRoute",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 103,
"function": "makeApiCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"attributes": {},
"request": {},
"query": {},
"server": {},
"files": {},
"cookies": {},
"headers": {}
},
{
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
"line": 39,
"function": "makeResponseCall",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/shipments/{id}/tracking",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get tracking information for a shipment",
"description": "Returns tracking events and details for a specific shipment",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"id": {
"custom": [],
"name": "id",
"description": "The ID of the shipment",
"required": true,
"example": "veritatis",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"id": "veritatis"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer fcab8eDEgk6aZV34vP5d6h1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "getTracking",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 466,
"function": "__invoke",
"class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/shipments/{id}/tracking",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get tracking information for a shipment",
"description": "Returns tracking events and details for a specific shipment",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"id": {
"custom": [],
"name": "id",
"description": "The ID of the shipment",
"required": true,
"example": "veritatis",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"id": "veritatis"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer fcab8eDEgk6aZV34vP5d6h1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "getTracking",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 392,
"function": "iterateThroughStrategies",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
"responses",
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/shipments/{id}/tracking",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get tracking information for a shipment",
"description": "Returns tracking events and details for a specific shipment",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"id": {
"custom": [],
"name": "id",
"description": "The ID of the shipment",
"required": true,
"example": "veritatis",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"id": "veritatis"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer fcab8eDEgk6aZV34vP5d6h1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "getTracking",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
},
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
"line": 93,
"function": "fetchResponses",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"custom": [],
"httpMethods": [
"GET"
],
"uri": "api/v1/shipments/{id}/tracking",
"metadata": {
"custom": [],
"groupName": "Shipments",
"groupDescription": "\nAPIs for managing shipments",
"subgroup": "",
"subgroupDescription": "",
"title": "Get tracking information for a shipment",
"description": "Returns tracking events and details for a specific shipment",
"authenticated": true,
"deprecated": false
},
"headers": {
"Authorization": "Bearer {YOUR_AUTH_KEY}"
},
"urlParameters": {
"id": {
"custom": [],
"name": "id",
"description": "The ID of the shipment",
"required": true,
"example": "veritatis",
"type": "string",
"enumValues": [],
"exampleWasSpecified": false,
"nullable": false,
"deprecated": false
}
},
"cleanUrlParameters": {
"id": "veritatis"
},
"queryParameters": [],
"cleanQueryParameters": [],
"bodyParameters": [],
"cleanBodyParameters": [],
"fileParameters": [],
"responses": [],
"responseFields": [],
"auth": [
"headers",
"Authorization",
"Bearer fcab8eDEgk6aZV34vP5d6h1"
],
"controller": {
"name": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"method": {
"name": "getTracking",
"class": "App\\Http\\Controllers\\Api\\ShipmentController"
},
"route": {
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 186,
"function": "processRoute",
"class": "Knuckles\\Scribe\\Extracting\\Extractor",
"type": "->",
"args": [
{
"uri": "api/v1/shipments/{id}/tracking",
"methods": [
"GET",
"HEAD"
],
"action": {
"middleware": [
"api",
"auth:sanctum"
],
"uses": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"controller": "\\App\\Http\\Controllers\\Api\\ShipmentController@getTracking",
"namespace": null,
"prefix": "api/v1",
"where": []
},
"isFallback": false,
"controller": {},
"defaults": [],
"wheres": {
"accountId": "[0-9]+",
"userId": "[0-9]+"
},
"parameters": {
"id": "veritatis"
},
"parameterNames": [
"id"
],
"computedMiddleware": [
"api",
"auth:sanctum"
],
"compiled": {}
},
{
"headers": {
"Content-Type": "application/json",
"Accept": "application/json"
},
"response_calls": {
"methods": [
"GET"
],
"config": {
"app.env": "documentation"
},
"queryParams": [],
"bodyParams": [],
"fileParams": [],
"cookies": []
}
}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
"line": 41,
"function": "{closure:Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp::extractEndpointsInfoFromLaravelApp():185}",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
"line": 59,
"function": "render",
"class": "Illuminate\\Console\\View\\Components\\Task",
"type": "->",
"args": [
"<options=bold>[<fg=cyan>GET</>]</> api/v1/shipments/{id}/tracking",
{}
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 183,
"function": "__call",
"class": "Illuminate\\Console\\View\\Components\\Factory",
"type": "->",
"args": [
"task",
[
"[<fg=cyan>GET</>] api/v1/shipments/{id}/tracking",
{}
]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 73,
"function": "extractEndpointsInfoFromLaravelApp",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
],
[],
[]
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
"line": 51,
"function": "extractEndpointsInfoAndWriteToDisk",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": [
{},
true
]
},
{
"file": "/app/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
"line": 55,
"function": "get",
"class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
"type": "->",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 36,
"function": "handle",
"class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Util.php",
"line": 43,
"function": "{closure:Illuminate\\Container\\BoundMethod::call():35}",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": []
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 96,
"function": "unwrapIfClosure",
"class": "Illuminate\\Container\\Util",
"type": "::",
"args": [
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
"line": 35,
"function": "callBoundMethod",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Container/Container.php",
"line": 799,
"function": "call",
"class": "Illuminate\\Container\\BoundMethod",
"type": "::",
"args": [
{
"contextual": {
"Laravel\\Telescope\\Storage\\DatabaseEntriesRepository": {
"$connection": "mysql",
"$chunkSize": 1000
}
},
"contextualAttributes": []
},
[
{},
"handle"
],
[],
null
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 211,
"function": "call",
"class": "Illuminate\\Container\\Container",
"type": "->",
"args": [
[
{},
"handle"
]
]
},
{
"file": "/app/vendor/symfony/console/Command/Command.php",
"line": 341,
"function": "execute",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Console/Command.php",
"line": 180,
"function": "run",
"class": "Symfony\\Component\\Console\\Command\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 1117,
"function": "run",
"class": "Illuminate\\Console\\Command",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 356,
"function": "doRunCommand",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{},
{}
]
},
{
"file": "/app/vendor/symfony/console/Application.php",
"line": 195,
"function": "doRun",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
"line": 198,
"function": "run",
"class": "Symfony\\Component\\Console\\Application",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/app/artisan",
"line": 35,
"function": "handle",
"class": "Illuminate\\Foundation\\Console\\Kernel",
"type": "->",
"args": [
{},
{}
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
events
string[]
List of tracking events with timestamps, descriptions, and locations
trackingUrl
string
URL to carrier's tracking page
carrier
string
The carrier name
trackingNumbers
string[]
The tracking numbers for the shipment
Shippers
Get all active shippers
requires authentication
Returns all active shippers available for the current account based on their carrier settings. Only includes carriers where the account has valid credentials configured.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/shippers';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));curl --request GET \
--get "https://app.packflow.se/api/v1/shippers" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}"const url = new URL(
"https://app.packflow.se/api/v1/shippers"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://app.packflow.se/api/v1/shippers'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"BUDBOX": {
"alias": "BUDBOX",
"company": "Budbee",
"service_name": "Box",
"addon": null,
"max_quantity": 1,
"min_weight": 0,
"max_weight": 20000
},
"PNVB": {
"alias": "PNVB",
"company": "PostNord",
"service_name": "Varubrev",
"addon": null,
"max_quantity": 1,
"min_weight": 0,
"max_weight": 2000
},
"DHLEP": {
"alias": "DHLEP",
"company": "DHL Express",
"service_name": "Express",
"addon": null,
"max_quantity": null,
"min_weight": 0,
"max_weight": null
}
}
Example response (200, No Active Shippers):
{
[]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.