MENU navbar-image

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"
}
 

Request      

GET api/v1/document/download/{type}/{ids}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

type   string     

The type of document to download. Possible values are: label, deliveryNote, picklist, packlist, shipmentList, labelSheet, customsDeclaration. Example: label

ids   string     

One or more shipment ids to download documents for, comma separated. Example: 0527cbbe-d1e9-454d-8770-ce66da5f8d1a,185dfc35-5644-46d7-9fba-f0264b7666a5

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"
}
 

Request      

POST api/v1/document/print/{type}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

type   string     

The type of document to print. Possible values are: label, deliveryNote, picklist, packlist, shipmentList, labelSheet, customsDeclaration. Example: label

Body Parameters

ids   string[]     

One or more shipment ids to print documents for.

label_printer_id   integer  optional    

optional The ID of the printer to use for labels. Example: 123

document_printer_id   integer  optional    

optional The ID of the printer to use for documents. Example: 124

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"
}
 

Request      

POST api/v1/document/print-file

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Body Parameters

file   file     

The PDF file to print. Example: /tmp/php7mbibud5fi0faGgloNO

printer_id   integer     

The PrintNode printer ID to send the file to. Example: 123

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"
}
 

Request      

POST api/v1/document/email/all

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

email   string  optional    

optional The email address to send documents to. If not specified, the email address configured in the account settings will be used. Example: your@company.com

Body Parameters

ids   string[]     

One or more shipment ids to email documents for.

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."
        ]
    }
}
 

Request      

POST api/v1/public/service-points

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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"
}
 

Request      

POST api/v1/public/portal/{slug}/service-points

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

slug   string     

The slug of the portal. Example: ipsam

Body Parameters

shipper_alias   string     

Example: accusantium

address   object  optional    
country   string     

Must be 2 characters. Example: by

zipcode   string     

Must not be greater than 20 characters. Example: kqqvdnxt

POST api/v1/orders/{orderId}/tags

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/qui/tags';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
        ],
        'json' => [
            'tag_id' => 12,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://app.packflow.se/api/v1/orders/qui/tags" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --data "{
    \"tag_id\": 12
}"
const url = new URL(
    "https://app.packflow.se/api/v1/orders/qui/tags"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "tag_id": 12
};

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/qui/tags'
payload = {
    "tag_id": 12
}
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/orders/{orderId}/tags",
                    "methods": [
                        "POST"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "qui"
                    },
                    "parameterNames": [
                        "orderId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/{orderId}/tags",
                    "methods": [
                        "POST"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "qui"
                    },
                    "parameterNames": [
                        "orderId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/{orderId}/tags",
                    "methods": [
                        "POST"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "qui"
                    },
                    "parameterNames": [
                        "orderId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/orders/{orderId}/tags",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}",
                        "Content-Type": "application/json"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "qui",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "qui"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": {
                        "tag_id": {
                            "custom": [],
                            "name": "tag_id",
                            "description": "",
                            "required": true,
                            "example": 12,
                            "type": "integer",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanBodyParameters": {
                        "tag_id": 12
                    },
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer 1cDdvh3aZ465aVe6gE8bfPk"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "attachToOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags",
                        "methods": [
                            "POST"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "qui"
                        },
                        "parameterNames": [
                            "orderId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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/orders/{orderId}/tags",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}",
                        "Content-Type": "application/json"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "qui",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "qui"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": {
                        "tag_id": {
                            "custom": [],
                            "name": "tag_id",
                            "description": "",
                            "required": true,
                            "example": 12,
                            "type": "integer",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanBodyParameters": {
                        "tag_id": 12
                    },
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer 1cDdvh3aZ465aVe6gE8bfPk"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "attachToOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags",
                        "methods": [
                            "POST"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "qui"
                        },
                        "parameterNames": [
                            "orderId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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/orders/{orderId}/tags",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}",
                        "Content-Type": "application/json"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "qui",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "qui"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": {
                        "tag_id": {
                            "custom": [],
                            "name": "tag_id",
                            "description": "",
                            "required": true,
                            "example": 12,
                            "type": "integer",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanBodyParameters": {
                        "tag_id": 12
                    },
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer 1cDdvh3aZ465aVe6gE8bfPk"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "attachToOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags",
                        "methods": [
                            "POST"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "qui"
                        },
                        "parameterNames": [
                            "orderId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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/orders/{orderId}/tags",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}",
                        "Content-Type": "application/json"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "qui",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "qui"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": {
                        "tag_id": {
                            "custom": [],
                            "name": "tag_id",
                            "description": "",
                            "required": true,
                            "example": 12,
                            "type": "integer",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanBodyParameters": {
                        "tag_id": 12
                    },
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer 1cDdvh3aZ465aVe6gE8bfPk"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "attachToOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags",
                        "methods": [
                            "POST"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "qui"
                        },
                        "parameterNames": [
                            "orderId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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/{orderId}/tags",
                    "methods": [
                        "POST"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@attachToOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "qui"
                    },
                    "parameterNames": [
                        "orderId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/orders/{orderId}/tags",
                {}
            ]
        },
        {
            "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/orders/{orderId}/tags",
                    {}
                ]
            ]
        },
        {
            "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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

POST api/v1/orders/{orderId}/tags

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

orderId   string     

Example: qui

Body Parameters

tag_id   integer     

Example: 12

DELETE api/v1/orders/{orderId}/tags/{tagId}

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.packflow.se/api/v1/orders/dolor/tags/temporibus';
$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/dolor/tags/temporibus" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"
const url = new URL(
    "https://app.packflow.se/api/v1/orders/dolor/tags/temporibus"
);

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/dolor/tags/temporibus'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('DELETE', 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/{orderId}/tags/{tagId}",
                    "methods": [
                        "DELETE"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "parameterNames": [
                        "orderId",
                        "tagId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/{orderId}/tags/{tagId}",
                    "methods": [
                        "DELETE"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "parameterNames": [
                        "orderId",
                        "tagId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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/{orderId}/tags/{tagId}",
                    "methods": [
                        "DELETE"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "parameterNames": [
                        "orderId",
                        "tagId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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": [
                        "DELETE"
                    ],
                    "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "dolor",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        },
                        "tagId": {
                            "custom": [],
                            "name": "tagId",
                            "description": "",
                            "required": true,
                            "example": "temporibus",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": [],
                    "cleanBodyParameters": [],
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer kvgVbdf6531DE64ZePacah8"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "detachFromOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                        "methods": [
                            "DELETE"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "dolor",
                            "tagId": "temporibus"
                        },
                        "parameterNames": [
                            "orderId",
                            "tagId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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": [
                        "DELETE"
                    ],
                    "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "dolor",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        },
                        "tagId": {
                            "custom": [],
                            "name": "tagId",
                            "description": "",
                            "required": true,
                            "example": "temporibus",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": [],
                    "cleanBodyParameters": [],
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer kvgVbdf6531DE64ZePacah8"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "detachFromOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                        "methods": [
                            "DELETE"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "dolor",
                            "tagId": "temporibus"
                        },
                        "parameterNames": [
                            "orderId",
                            "tagId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "compiled": {}
                    }
                },
                []
            ]
        },
        {
            "file": "/app/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->",
            "args": [
                "responses",
                {
                    "custom": [],
                    "httpMethods": [
                        "DELETE"
                    ],
                    "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "dolor",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        },
                        "tagId": {
                            "custom": [],
                            "name": "tagId",
                            "description": "",
                            "required": true,
                            "example": "temporibus",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": [],
                    "cleanBodyParameters": [],
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer kvgVbdf6531DE64ZePacah8"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "detachFromOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                        "methods": [
                            "DELETE"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "dolor",
                            "tagId": "temporibus"
                        },
                        "parameterNames": [
                            "orderId",
                            "tagId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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": [
                        "DELETE"
                    ],
                    "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                    "metadata": {
                        "custom": [],
                        "groupName": "Endpoints",
                        "groupDescription": "",
                        "subgroup": "",
                        "subgroupDescription": "",
                        "title": "",
                        "description": "",
                        "authenticated": true,
                        "deprecated": false
                    },
                    "headers": {
                        "Authorization": "Bearer {YOUR_AUTH_KEY}"
                    },
                    "urlParameters": {
                        "orderId": {
                            "custom": [],
                            "name": "orderId",
                            "description": "",
                            "required": true,
                            "example": "dolor",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        },
                        "tagId": {
                            "custom": [],
                            "name": "tagId",
                            "description": "",
                            "required": true,
                            "example": "temporibus",
                            "type": "string",
                            "enumValues": [],
                            "exampleWasSpecified": false,
                            "nullable": false,
                            "deprecated": false
                        }
                    },
                    "cleanUrlParameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "queryParameters": [],
                    "cleanQueryParameters": [],
                    "bodyParameters": [],
                    "cleanBodyParameters": [],
                    "fileParameters": [],
                    "responses": [],
                    "responseFields": [],
                    "auth": [
                        "headers",
                        "Authorization",
                        "Bearer kvgVbdf6531DE64ZePacah8"
                    ],
                    "controller": {
                        "name": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "method": {
                        "name": "detachFromOrder",
                        "class": "App\\Http\\Controllers\\Api\\TagController"
                    },
                    "route": {
                        "uri": "api/v1/orders/{orderId}/tags/{tagId}",
                        "methods": [
                            "DELETE"
                        ],
                        "action": {
                            "middleware": [
                                "api",
                                "auth:sanctum",
                                "hasAccess"
                            ],
                            "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                            "namespace": null,
                            "prefix": "api/v1",
                            "where": []
                        },
                        "isFallback": false,
                        "controller": {},
                        "defaults": [],
                        "wheres": {
                            "accountId": "[0-9]+",
                            "userId": "[0-9]+"
                        },
                        "parameters": {
                            "orderId": "dolor",
                            "tagId": "temporibus"
                        },
                        "parameterNames": [
                            "orderId",
                            "tagId"
                        ],
                        "computedMiddleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "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/{orderId}/tags/{tagId}",
                    "methods": [
                        "DELETE"
                    ],
                    "action": {
                        "middleware": [
                            "api",
                            "auth:sanctum",
                            "hasAccess"
                        ],
                        "uses": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "controller": "\\App\\Http\\Controllers\\Api\\TagController@detachFromOrder",
                        "namespace": null,
                        "prefix": "api/v1",
                        "where": []
                    },
                    "isFallback": false,
                    "controller": {},
                    "defaults": [],
                    "wheres": {
                        "accountId": "[0-9]+",
                        "userId": "[0-9]+"
                    },
                    "parameters": {
                        "orderId": "dolor",
                        "tagId": "temporibus"
                    },
                    "parameterNames": [
                        "orderId",
                        "tagId"
                    ],
                    "computedMiddleware": [
                        "api",
                        "auth:sanctum",
                        "hasAccess"
                    ],
                    "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>DELETE</>]</> api/v1/orders/{orderId}/tags/{tagId}",
                {}
            ]
        },
        {
            "file": "/app/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->",
            "args": [
                "task",
                [
                    "[<fg=cyan>DELETE</>] api/v1/orders/{orderId}/tags/{tagId}",
                    {}
                ]
            ]
        },
        {
            "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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

DELETE api/v1/orders/{orderId}/tags/{tagId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

orderId   string     

Example: dolor

tagId   string     

Example: temporibus

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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

GET api/v1/analytics/shipments/{alias}/{startDate}/{endDate}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

alias   string     

Example: neque

startDate   string     

Example: ullam

endDate   string     

Example: quae

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"
}
 

Request      

GET api/v1/orders/fetch/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

id   integer     

The id of the account connection. Example: 1

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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

GET api/v1/orders/product-breakdown

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Query Parameters

search   string  optional    

Optional general search filter. Example: john

product   string  optional    

Optional product SKU filter. Example: ABC-123

mode   string  optional    

Filter mode for product: contains|hasOnly|containsText. Default: contains Example: necessitatibus

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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

GET api/v1/orders/identical-groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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
}
 

Request      

GET api/v1/orders/{type}/{page?}

POST api/v1/orders/{type}/{page?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

type   string     

The type of orders to fetch, default is new. Example: new|sent

page   string  optional    

Example: labore

Query Parameters

page   integer  optional    

The page number to fetch. Default is 1. Example: 1

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
}
 

Request      

GET api/v1/orders/{orderId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

orderId   string     

The UUID of the order. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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"
}
 

Request      

PATCH api/v1/orders/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

id   string     

The ID of the order. Example: ullam

orderId   string     

The UUID of the order, must match the id in the payload object. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

Body Parameters

id   string     

The UUID of the order, must match the id in the url. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

parcels   integer  optional    

The number of parcels in the order. Example: 2

shipper_alias   string  optional    

The shipper alias of the order. Example: PNVB

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"
}
 

Request      

POST api/v1/orders/deliver

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

The request body is an array (string[]`), representing required..

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):



 

Request      

GET api/v1/orders/search/{search}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

search   string     

The search string. Example: 462343 or John Doe

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):



 

Request      

DELETE api/v1/orders/{ids}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

ids   string     

The order ids. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d

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"
}
 

Request      

POST api/v1/orders

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shop_order_id   string     

The internal order id from from the platform. Example: 5373921919213

shop_order_id_alias   string  optional    

A user friendly display version of the order id. Example: #1001

source_shipper_id   string  optional    

An id of the shipper in the source system. Example: 123456

parcels   integer  optional    

The number of parcels in the order. Example: 1

amount   number  optional    

The total amount of the order. Example: 100

items_amount   number  optional    

The total amount of the items in the order. Example: 90

currency_iso   string  optional    

The currency of the order. Example: SEK

weight   integer  optional    

The total weight of the order. Example: 1250

order_date   string  optional    

Must be a valid date in the format Y-m-d H:i:s. Example: 2026-04-28 21:38:21

shipper_alias   string  optional    
booked   integer  optional    

Whether the order is booked (label created) or not. Should probably always be 0. Example: 0

reference   string  optional    

A reference of max 35 characters for the order. Example: Free samples

package_size_id   integer  optional    

The id of an existing record in the package_sizes table. Example: 9

firstname   string  optional    

optional The firstname of the receiver. Example: John

lastname   string  optional    

optional The lastname of the receiver. Example: Doe

company_name   string  optional    

optional The company name of the receiver. Example: John Doe AB

address   string     

The address of the receiver. Example: Storgatan 1

zipcode   string     

The zipcode of the receiver. Example: 12345

city   string     

The city of the receiver. Example: Stockholm

country_iso   string     

The country of the receiver. Example: SE

email   string  optional    

The email of the receiver. Example: john@doe.com

cellphone   string  optional    

The cellphone of the receiver. Example: 0701234567

phone   string  optional    

The phone of the receiver. Example: 081234567

items   object[]  optional    
sku   string  optional    

This field is required when items.*.title is not present. Must not be greater than 255 characters. Example: skjdl

title   string  optional    

This field is required when items.*.sku is not present. Must not be greater than 255 characters. Example: qjefyzfncgttfmgelo

address2   string  optional    

The second address line of the receiver. Example: Lgh 123

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"
}
 

Request      

GET api/v1/orders/items/{itemId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

itemId   string     

The UUID of the order item. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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"
}
 

Request      

PATCH api/v1/orders/items/{itemId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

itemId   string     

The UUID of the order item. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

Body Parameters

sku   string  optional    

Must not be greater than 255 characters. Example: jmrhiubebpyigmxoeugqoper

title   string  optional    

Must not be greater than 255 characters. Example: hogt

weight   number  optional    

Example: 6883.49

price   number  optional    

Example: 2795349

origin_country_iso   string  optional    

Must be at least 2 characters. Must not be greater than 2 characters. Example: sb

hs_code   string  optional    

Must not be greater than 20 characters. Example: hvssryhf

length   number  optional    

Example: 108421.59658296

width   number  optional    

Example: 114.001477

height   number  optional    

Example: 62265723

quantity   number  optional    

Example: 2642276

origin_quantity   number  optional    

Example: 63539

shelf   string  optional    

Must not be greater than 50 characters. Example: ahbdxzzdy

ean   string  optional    

Must not be greater than 50 characters. Example: qhkyvvasyupo

row_id   number  optional    

Example: 82.130258

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"
}
 

Request      

POST api/v1/orders/{orderId}/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

orderId   string     

The UUID of the order the item should belong to. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

Body Parameters

sku   string  optional    

The SKU of the item. Example: SAMSUNG-S20

title   string  optional    

The title of the item. Example: Samsung Galaxy S20

weight   number  optional    

The weight of the item in grams. Example: 163

price   number  optional    

The price of the item. Example: 3499

origin_country_iso   string  optional    

The origin country of the item. Example: CN

hs_code   string  optional    

The HS code of the item. Example: 85171200

length   number  optional    

The length of the item in centimeters. Example: 15

width   number  optional    

The width of the item in centimeters. Example: 10

height   number  optional    

The height of the item in centimeters. Example: 5

quantity   integer  optional    

The quantity of the item. Example: 1

shelf   string  optional    

The shelf of the item. Example: PLA-H4

ean   string  optional    

Must not be greater than 50 characters. Example: fdeqljudxcpweydkc

row_id   integer  optional    

The row id of the item, normally used only for CDON. Example: 2

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):



 

Request      

DELETE api/v1/orders/items/{itemId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

itemId   string     

The UUID of the order item. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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"
        }
    ]
}
 

Request      

GET api/v1/package-sizes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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."
        ]
    }
}
 

Request      

POST api/v1/package-sizes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

name   string     

The name of the package size. Example: Small

length   numeric     

The length of the package size in cm. Example: 10

width   numeric     

The width of the package size in cm. Example: 10

height   numeric     

The height of the package size in cm. Example: 10

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": ""
        }
    ]
}
 

Request      

POST api/v1/pickup

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipment_ids   string[]     

The ids of the shipments to be picked up.

address_id   string  optional    

The id of the address in the address book where the pickup will take place. Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

address_alias   string  optional    

The alias of the address in the address book where the pickup will take place. Example: Warehouse

date   string     

The date of the pickup in Y-m-d format. Example: 2025-01-15

location   string     

The location where the pickup will take place. Example: Reception

start   string     

The start time of the pickup in H:i format. Example: 09:00

end   string     

The end time of the pickup in H:i format. Example: 17:00

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"
        }
    ]
}
 

Request      

POST api/v1/pickup/validate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

ids   string[]     

The ids of the shipments to be validated.

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"
}
 

Request      

POST api/v1/service-points

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipper_alias   string     

The alias of the shipper service. Example: PNMC

address   object     

The address details to find nearby service points.

country   string     

The country code in ISO format. Example: SE

zipcode   string     

The postal code to search around. Example: 11253

limit   integer  optional    

optional The maximum number of service points to return. Default: 20. Example: 10

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."
}
 

Request      

GET api/v1/settings/connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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:

  1. 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)
  2. 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:

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):


[]
 

Request      

GET api/v1/shipments/picking/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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:

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"
}
 

Request      

POST api/v1/shipments/picking/progress

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

item_id   string     

The ID of the shipment item to update. Example: "8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3"

picked_quantity   integer     

The quantity being picked or 0 to reset. Must be non-negative and not exceed remaining quantity. Example: 2

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:

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):


[]
 

Request      

GET api/v1/shipments/pickpack

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

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
}
 

Request      

GET api/v1/shipments/sent/{page?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

page   string  optional    

Example: nihil

Body Parameters

page   integer  optional    

The page number for pagination. Default: 1. Example: 1

per_page   integer  optional    

The number of shipments per page. Default: 100. Example: 100

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:

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
}
 

Request      

GET api/v1/shipments/search/{query}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

query   string     

The search term to look for in shipment and receiver data. Example: john@example.com

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:

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"
}
 

Request      

POST api/v1/shipments/create/{status?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

status   string  optional    

Example: quae

Body Parameters

The request body is an array (string[]`), representing the order ids to create shipments for..

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:

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"
}
 

Request      

POST api/v1/shipments/picked

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipment_ids   string[]     

Array of shipment IDs to mark as picked.

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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

POST api/v1/shipments/assign-optimized

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipment_ids   string[]     

Must be a valid UUID.

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"
}
 

Request      

POST api/v1/shipments/assign

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipment_ids   string[]     

Array of shipment IDs to assign.

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"
}
 

Request      

POST api/v1/shipments/book-freight

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipmentIds   string[]     

Array of shipment IDs to book freight for.

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:

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):


[]
 

Request      

POST api/v1/shipments/byorderid

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

order_ids   string[]     

Array of order IDs to get shipments for.

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:

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"
}
 

Request      

POST api/v1/shipments/book

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shop_order_id   string     

The internal order id from the platform. Example: 5373921919213

shop_order_id_alias   string  optional    

A user friendly display version of the order id. Example: #1001

source_shipper_id   string  optional    

An id of the shipper in the source system (used for order rules). Example: 123456

parcels   integer  optional    

The number of parcels in the order. Example: 1

amount   number  optional    

The total amount of the order. Example: 100

items_amount   number  optional    

The total amount of the items in the order. Example: 90

currency_iso   string  optional    

The currency of the order. Example: SEK

weight   integer  optional    

The total weight of the order in grams. Example: 1250

order_date   string  optional    

The date of the order. Example: 2021-12-24 12:00:00

shipper_alias   string     

The alias of the shipper. Example: PNVB

incoterms   string  optional    

The Incoterms rule for the shipment (e.g., EXW, FCA, CPT, CIP, DAP, DDP). Example: DAP

reference   string  optional    

A reference of max 35 characters for the order. Example: Free samples

agent_id   string  optional    

The service point / agent id to deliver the parcel to. Look up valid ids via the carrier's service point endpoint. Example: SE-204500

package_size_id   integer  optional    

The package size id of the order. Example: 1

deliver   boolean  optional    

If set to true, the shipment (and order) will be delivered and marked as complete. Example: true

receiver   object     

The receiver of the order.

firstname   string  optional    

optional The firstname of the receiver. Example: John

lastname   string  optional    

optional The lastname of the receiver. Example: Doe

company_name   string  optional    

optional The company name of the receiver. Example: John Doe AB

address   string     

The address of the receiver. Example: Storgatan 1

address2   string  optional    

The second address line of the receiver. Example: Lgh 123

zipcode   string     

The zipcode of the receiver. Example: 12345

city   string     

The city of the receiver. Example: Stockholm

country_iso   string     

The country of the receiver. Example: SE

email   string  optional    

The email of the receiver. Example: john@doe.com

cellphone   string  optional    

The cellphone of the receiver. Example: 0701234567

phone   string  optional    

The phone of the receiver. Example: 081234567

sender   object  optional    

optional The sender of the order.

firstname   string  optional    

optional The firstname of the sender. Example: Jane

lastname   string  optional    

optional The lastname of the sender. Example: Smith

company_name   string  optional    

optional The company name of the sender. Example: Jane Smith AB

address   string  optional    

The address of the sender. Example: Lillgatan 2

address2   string  optional    

The second address line of the sender. Example: Lgh 456

zipcode   string  optional    

The zipcode of the sender. Example: 54321

city   string  optional    

The city of the sender. Example: Gothenburg

country_iso   string  optional    

The country of the sender. Example: SE

email   string  optional    

The email of the sender. Example: jane@smith.com

cellphone   string  optional    

The cellphone of the sender. Example: 0707654321

phone   string  optional    

The phone of the sender. Example: 087654321

items   object[]  optional    

optional The items in the order.

sku   string  optional    

optional if title is present. The SKU of the item. Example: 123456

title   string  optional    

optional if SKU is present. The title of the item. Example: Product name

weight   integer  optional    

optional The weight of the item in grams. Example: 250

price   number  optional    

optional The price of the item. Example: 50

origin_country_iso   string  optional    

optional The country of origin of the item. Example: CN

hs_code   string  optional    

optional The HS code of the item. Example: 123456

length   integer  optional    

optional The length of the item in mm. Example: 100

width   integer  optional    

optional The width of the item in mm. Example: 100

height   integer  optional    

optional The height of the item in mm. Example: 100

quantity   integer  optional    

optional The quantity of the item. Example: 1

shelf   string  optional    

optional The shelf of the item. Example: A1

colli   integer  optional    

optional What collinumber the item is in. Example: 1

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"
}
 

Request      

POST api/v1/shipments/return

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

original_shipment_id   string     

The ID of the original shipment to create a return for. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

shipper_alias   string     

The alias of the shipping method to use for the return. Example: PNVBR

email_label   string  optional    

optional Email address to send the return label to. Example: customer@example.com

return_items   object[]  optional    
id   string  optional    

This field is required when return_items is present. Example: omnis

quantity   integer  optional    

This field is required when return_items is present. Must be at least 1. Example: 26

reason   string     

Example: velit

resolution   string  optional    

Example: return

Must be one of:
  • return
  • exchange
  • credit
  • other
parcels   integer  optional    

Must be at least 1. Example: 80

weight   integer  optional    

Must be at least 0. Example: 11

qr_code   boolean  optional    

Example: true

receiver_address   object  optional    

optional Override the return-to address. Provide either an existing address ID or inline address fields.

id   string  optional    

optional The ID of an existing address to use as the return-to address. Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

company_name   string  optional    

optional Company name for the return-to address. Example: Returns Center AB

firstname   string  optional    

optional First name for the return-to address. Example: John

lastname   string  optional    

optional Last name for the return-to address. Example: Doe

address   string  optional    

conditional Required when providing inline address (without receiver_address.id). Example: Returngatan 1

address2   string  optional    

optional Secondary address line. Example: Floor 2

zipcode   string  optional    

conditional Required when providing inline address (without receiver_address.id). Example: 12345

city   string  optional    

conditional Required when providing inline address (without receiver_address.id). Example: Stockholm

state   string  optional    

optional State or region. Example: Stockholm

country_iso   string  optional    

conditional Required when providing inline address (without receiver_address.id). Example: SE

email   string  optional    

optional Email address for the return-to address. Example: returns@example.com

cellphone   string  optional    

optional Cell phone number. Example: +46701234567

phone   string  optional    

optional Phone number. Example: +4687654321

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:

The duplicated shipment inherits all other properties from the original shipment including:

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"
}
 

Request      

POST api/v1/shipments/duplicate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

shipment_id   string     

The ID of the shipment to duplicate. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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"
}
 

Request      

POST api/v1/shipments/deliver

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Body Parameters

The request body is an array (string[]`), representing array of shipment IDs to deliver..

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:

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"
}
 

Request      

DELETE api/v1/shipments/{ids}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

ids   string     

The comma-separated list of shipment IDs to delete. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c,156cb70d-945f-4b70-ab23-88d02d24ed8d

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):



 

Request      

GET api/v1/shipments/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

id   string     

The shipment id. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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"
}
 

Request      

POST api/v1/shipments/{id}/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

id   string     

The ID of the shipment. Example: 8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3

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"
}
 

Request      

PATCH api/v1/shipments/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

id   string     

The ID of the shipment item to update. Example: 8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3

Body Parameters

sku   string  optional    

The SKU code of the item. Example: SKU123

title   string  optional    

The descriptive name of the item. Example: Blue Widget

price   numeric  optional    

The unit price of the item. Must be at least 0. Example: 19.99

origin_country_iso   string  optional    

The ISO country code (2 letters) for the item's origin. Example: CN

hs_code   string  optional    

The Harmonized System code for customs classification. Example: 847130

shelf   string  optional    

The warehouse shelf location of the item. Example: A12

weight   integer  optional    

The weight of the item in grams. Must be at least 0. Example: 500

quantity   integer  optional    

The quantity of the item. Must be at least 0. Example: 2

picked_quantity   integer  optional    

The picked quantity of the item. Must be at least 0. Example: 1

colli   integer  optional    

The colli (parcel) number this item belongs to. Must be at least 0. Example: 1

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"
}
 

Request      

PUT api/v1/shipments/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

id   string     

The ID of the shipment item to update. Example: 8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3

Body Parameters

sku   string  optional    

The SKU code of the item. Example: SKU123

title   string  optional    

The descriptive name of the item. Example: Blue Widget

price   numeric  optional    

The unit price of the item. Must be at least 0. Example: 19.99

origin_country_iso   string  optional    

The ISO country code (2 letters) for the item's origin. Example: CN

hs_code   string  optional    

The Harmonized System code for customs classification. Example: 847130

shelf   string  optional    

The warehouse shelf location of the item. Example: A12

weight   integer  optional    

The weight of the item in grams. Must be at least 0. Example: 500

quantity   integer  optional    

The quantity of the item. Must be at least 0. Example: 2

picked_quantity   integer  optional    

The picked quantity of the item. Must be at least 0. Example: 1

colli   integer  optional    

The colli (parcel) number this item belongs to. Must be at least 0. Example: 1

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"
}
 

Request      

DELETE api/v1/shipments/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

id   string     

The ID of the shipment item to delete. Example: 8a7d8fd5-9839-4da3-a5c1-28d5f886a4b3

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"
}
 

Request      

PATCH api/v1/shipments/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

id   string     

The ID of the shipment to update. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

Body Parameters

shipper_alias   string  optional    

The alias of the shipping method to use. Example: PNVB

reference   string  optional    

A reference text for the shipment (max 35 characters). Example: "Order #123"

weight   integer  optional    

The total weight of the shipment in grams. Example: 1000

parcels   integer  optional    

The number of parcels in the shipment. Example: 2

receiver   object  optional    

optional The receiver's address details.

firstname   string  optional    

The receiver's first name. Required without company_name. Example: John

lastname   string  optional    

The receiver's last name. Required without company_name. Example: Doe

company_name   string  optional    

The receiver's company name. Required without firstname/lastname. Example: ACME Corp

address   string  optional    

The receiver's street address. Example: "123 Main St"

address2   string  optional    

The receiver's secondary address. Example: "Suite 456"

city   string  optional    

The receiver's city. Example: Stockholm

state   string  optional    

The receiver's state/province. Example: Stockholm

zipcode   string  optional    

The receiver's postal code. Example: "12345"

country_iso   string  optional    

The receiver's country code (2 letters). Example: SE

email   string  optional    

The receiver's email address. Example: john@example.com

cellphone   string  optional    

The receiver's phone number. Example: "+46701234567"

customer_number   string  optional    

The receiver's customer number. Example: "CUST123"

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"
}
 

Request      

PUT api/v1/shipments/{shipmentId}/parcels/{colli}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

URL Parameters

shipmentId   string     

The ID of the shipment containing the parcel. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

colli   integer     

The colli number of the parcel to update. Example: 1

Body Parameters

weight   integer  optional    

optional The manual weight to set for the parcel in grams. If not set, weight will be calculated from items. Example: 1000

reference   string  optional    

optional A reference text for the parcel (max 35 characters). Example: "Box 1"

dimensions   object  optional    

optional The dimensions of the parcel in millimeters.

length   numeric  optional    

optional Length of the parcel. Example: 300

width   numeric  optional    

optional Width of the parcel. Example: 200

height   numeric  optional    

optional Height of the parcel. Example: 100

package_size_id   integer  optional    

optional ID of a predefined package size to use. Will set dimensions and weight unless overridden. Example: 1

tracking_number   string  optional    

optional Individual tracking number for this specific parcel. Example: "UU039810242SE"

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"
}
 

Request      

GET api/v1/shipments/{shipmentId}/parcels/{colli}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

shipmentId   string     

The ID of the shipment containing the parcel. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

colli   integer     

The colli number of the parcel to retrieve. Example: 1

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"
}
 

Request      

GET api/v1/shipments/{shipmentId}/parcels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

shipmentId   string     

The ID of the shipment to get parcels for. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

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:

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"
}
 

Request      

DELETE api/v1/shipments/{shipmentId}/parcels/{colli}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

shipmentId   string     

The ID of the shipment containing the parcel. Example: 156cb70d-945f-4b70-ab23-88d02d24ed8c

colli   integer     

The colli number of the parcel to delete. Must be greater than 1. Example: 2

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": [
                {},
                {}
            ]
        }
    ]
}
 

Request      

GET api/v1/shipments/{id}/tracking

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

URL Parameters

id   string     

The ID of the shipment Example: veritatis

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):


{
  []
}
 

Request      

GET api/v1/shippers

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}