List a crew member's documents
curl --request GET \
--url https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"crew_unique_id": "<string>",
"items": [
{
"document_id": "<string>",
"type": "<string>",
"category": "<string>",
"title": "<string>",
"issuer": "<string>",
"verification_status": "<string>",
"status": "<string>",
"issue_date": "<string>",
"expiry_date": "<string>",
"document_number": "<string>",
"review_status": "verified",
"is_expired": true,
"no_expiry": true,
"is_current": true,
"superseded_by": "<string>",
"classification": {
"taxonomy_version": "2026-09-17.230e599f",
"document_class": "training",
"category_code": "stcw_training",
"catalogue_title": {
"id": "<string>",
"name": "<string>"
},
"stcw_regulation": "VI/1",
"stcw_codes": [
"VI/1-1"
],
"level": "management",
"is_refresher": true,
"flag_state": "GB",
"coc_capacities": [
{
"stcw_regulation": "II/2",
"role": "Chief Mate",
"level": "management",
"gt_max": 3000,
"kw_max": 123,
"power_unrestricted": true,
"area": "unlimited",
"vessel_types": [
"yacht"
]
}
],
"sources": [
"document_type"
]
}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Documents
List a crew member's documents
A crew member’s current certificates and other documents.
Each document has its issuer, verification status, dates, and a
classification you can map to your own document types. Only documents
CrewPass has finished processing are listed. To fetch a file, use the
download endpoint. Returns 404 if the crew member is not on one of your
vessels.
Requires crew:documents:read.
GET
/
api
/
v2
/
employers
/
me
/
crew
/
{crew_unique_id}
/
documents
List a crew member's documents
curl --request GET \
--url https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://partners.crewpass.co.uk/api/v2/employers/me/crew/{crew_unique_id}/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"crew_unique_id": "<string>",
"items": [
{
"document_id": "<string>",
"type": "<string>",
"category": "<string>",
"title": "<string>",
"issuer": "<string>",
"verification_status": "<string>",
"status": "<string>",
"issue_date": "<string>",
"expiry_date": "<string>",
"document_number": "<string>",
"review_status": "verified",
"is_expired": true,
"no_expiry": true,
"is_current": true,
"superseded_by": "<string>",
"classification": {
"taxonomy_version": "2026-09-17.230e599f",
"document_class": "training",
"category_code": "stcw_training",
"catalogue_title": {
"id": "<string>",
"name": "<string>"
},
"stcw_regulation": "VI/1",
"stcw_codes": [
"VI/1-1"
],
"level": "management",
"is_refresher": true,
"flag_state": "GB",
"coc_capacities": [
{
"stcw_regulation": "II/2",
"role": "Chief Mate",
"level": "management",
"gt_max": 3000,
"kw_max": 123,
"power_unrestricted": true,
"area": "unlimited",
"vessel_types": [
"yacht"
]
}
],
"sources": [
"document_type"
]
}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Partner API key (cpk_live_* / cpk_test_*) as a Bearer token.
Headers
Your API key, as an alternative to the Authorization: Bearer header.