DSV

DSV Document Upload API

Uploads documents against an existing DSV booking or shipment for air, sea, European road and rail traffic.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dsv-document-upload-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dsv-generic-upload-demo-v1-openapi.json Raw ↑
{
  "openapi": "3.0.1",
  "info": {
    "title": "UPLOAD - Air, Sea, Road (EU), Rail (DEMO)",
    "description": "Upload available documents for your bookings and shipments moved by DSV. Supported transport modes: Air, Sea, Road (EU) and Rail.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.dsv.com/my-demo/upload/v1"
    }
  ],
  "paths": {
    "/shipments/bookingId/{type}/{bookingId}": {
      "post": {
        "tags": [
          "Upload attachment using Booking ID"
        ],
        "summary": "Upload attachment using Booking Id",
        "description": "Upload attachment to shipment. Allowed types: \"CUS\", \"GDS\",\"HAZ\", \"INV\", \"PKL\"",
        "operationId": "uploadDocumentByBookingId",
        "parameters": [
          {
            "name": "bookingId",
            "in": "path",
            "description": "Unique identifier of the DSV booking",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "path",
            "description": "Allowed types:\n- CUS - Customs Declaration\n- GDS - Other Goods Document\n- HAZ - Dangerous Goods Document\n- INV - Commercial Invoice\n- PKL - Packing list",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "DSV-Service-Auth",
            "in": "header",
            "description": "Basic Auth header - Will be deprecated",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Oauth header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "It is not possible to delete documents which have been uploaded via the API to DSV\n\nAll files are scanned for antimalware and the Maximum file size is 3MB.\n\nHere is a list of the most used content-types:\n- .xls = Content-Type: application/vnd.ms-excel\n- .xlsx = Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n- .pdf = Content-Type: application/pdf\n- .txt = Content-Type: text/plain\n- .doc = Content-Type: application/msword\n- .docx = Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document\n- .ppt = Content-Type: application/vnd.ms-powerpoint\n- .pptx = Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation\n- .jpg = Content-Type: image/x-citrix-jpeg\n- .jpeg = Content-Type: image/x-citrix-jpeg\n- .png = Content-Type: image/x-png\n- .bmp = Content-Type: image/bmp\n- .json = Content-Type: application/json\n- .zip = Content-Type: application/zip",
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "File uploaded successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "Created"
              }
            }
          },
          "400": {
            "description": "Request contains not valid data",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": {
                  "id": "73f3adf3-c508-4498-b618-5afa042956af",
                  "message": "Incorrect type"
                }
              }
            }
          },
          "401": {
            "description": "Not authorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": {
                  "Code": 401,
                  "Message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription."
                }
              }
            }
          },
          "403": {
            "description": "Lack of privileges to use this method",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": {
                  "code": 403,
                  "message": "Access denied due to missing API role. Please contact DSV via email at developer.support@dsv.com"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "Internal Server Error"
              }
            }
          }
        }
      }
    },
    "/shipments/tmsId/{type}/{tmsId}": {
      "post": {
        "tags": [
          "Upload attachment using Shipment Id"
        ],
        "summary": "Upload attachment using Shipment Id",
        "description": "Upload an attachment to a shipment identified by TMSID. TMSID is the DSV Shipment ID (also referred to as 'shipmentId' in some UI screens). Allowed document types: CUS, GDS, HAZ, INV, PKL.",
        "operationId": "uploadDocumentByShipmentId",
        "parameters": [
          {
            "name": "tmsId",
            "in": "path",
            "description": "Unique identifier for the DSV shipment (TMSID = Shipment ID).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "path",
            "description": "Allowed types:\n- CUS - Customs Declaration\n- GDS - Other Goods Document\n- HAZ - Dangerous Goods Document\n- INV - Commercial Invoice\n- PKL - Packing list",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "DSV-Service-Auth",
            "in": "header",
            "description": "Basic Auth header - Will be deprecated",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Oauth header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "It is not possible to delete documents which have been uploaded via the API to DSV\n\nAll files are scanned for antimalware and the Maximum file size is 3MB.\n\nHere is a list of the most used content-types:\n- .xls = Content-Type: application/vnd.ms-excel\n- .xlsx = Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n- .pdf = Content-Type: application/pdf\n- .txt = Content-Type: text/plain\n- .doc = Content-Type: application/msword\n- .docx = Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document\n- .ppt = Content-Type: application/vnd.ms-powerpoint\n- .pptx = Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation\n- .jpg = Content-Type: image/x-citrix-jpeg\n- .jpeg = Content-Type: image/x-citrix-jpeg\n- .png = Content-Type: image/x-png\n- .bmp = Content-Type: image/bmp\n- .json = Content-Type: application/json\n- .zip = Content-Type: application/zip",
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "File uploaded successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          },
          "400": {
            "description": "Request contains not valid data",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          },
          "401": {
            "description": "Not authorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          },
          "403": {
            "description": "Lack of privileges to use this method",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKeyHeader": {
        "type": "apiKey",
        "name": "DSV-Subscription-Key",
        "in": "header"
      },
      "apiKeyQuery": {
        "type": "apiKey",
        "name": "DSV-Subscription-Key",
        "in": "query"
      }
    }
  },
  "security": [
    {
      "apiKeyHeader": []
    },
    {
      "apiKeyQuery": []
    }
  ]
}