cURL
curl --request GET \
--url https://api.dock.us/{version}/courses \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.dock.us/{version}/courses"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.dock.us/{version}/courses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dock.us/{version}/courses",
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://api.dock.us/{version}/courses"
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://api.dock.us/{version}/courses")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dock.us/{version}/courses")
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{
"data": {
"courses": [
{
"id": "RiHO4e0Ju3DS",
"updatedAt": "2026-10-01T00:00:00.000Z",
"createdAt": "2021-01-01T00:00:00.000Z",
"object": "course",
"url": "https://api.dock.us/v1/courses/RiHO4e0Ju3DS",
"name": "Sales onboarding",
"description": "Everything a new rep needs in their first week",
"courseUrl": "https://acme.dock.us/learning/courses/RiHO4e0Ju3DS/editor",
"isPublished": true,
"publishedAt": "2026-10-01T00:00:00.000Z",
"transcript": "Welcome\n\nIntro\nMeet the team.",
"creator": {
"id": "RiHO4e0Ju3DS",
"updatedAt": "2021-01-01T00:00:00.000Z",
"createdAt": "2021-01-01T00:00:00.000Z",
"object": "user",
"url": "https://api.dock.us/v1/users/RiHO4e0Ju3DS",
"firstName": "John",
"lastName": "Doe",
"avatar": "https://dock.us/avatar.png",
"email": "john.doe@example.com",
"name": "John Doe"
}
}
],
"pageInfo": {
"page": 1,
"pages": 10,
"total": 100,
"pageTotal": 10,
"hasNextPage": true,
"hasPrevPage": false
}
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "The request could not be understood or was missing required parameters"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Access denied. You are not authorized to access this resource"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Access to this resource is restricted"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource could not be found"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "The server has encountered a situation it does not know how to handle"
}
}Courses
Retrieve a list of courses
Retrieve a list of courses, newest first
GET
/
courses
cURL
curl --request GET \
--url https://api.dock.us/{version}/courses \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.dock.us/{version}/courses"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.dock.us/{version}/courses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dock.us/{version}/courses",
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://api.dock.us/{version}/courses"
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://api.dock.us/{version}/courses")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dock.us/{version}/courses")
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{
"data": {
"courses": [
{
"id": "RiHO4e0Ju3DS",
"updatedAt": "2026-10-01T00:00:00.000Z",
"createdAt": "2021-01-01T00:00:00.000Z",
"object": "course",
"url": "https://api.dock.us/v1/courses/RiHO4e0Ju3DS",
"name": "Sales onboarding",
"description": "Everything a new rep needs in their first week",
"courseUrl": "https://acme.dock.us/learning/courses/RiHO4e0Ju3DS/editor",
"isPublished": true,
"publishedAt": "2026-10-01T00:00:00.000Z",
"transcript": "Welcome\n\nIntro\nMeet the team.",
"creator": {
"id": "RiHO4e0Ju3DS",
"updatedAt": "2021-01-01T00:00:00.000Z",
"createdAt": "2021-01-01T00:00:00.000Z",
"object": "user",
"url": "https://api.dock.us/v1/users/RiHO4e0Ju3DS",
"firstName": "John",
"lastName": "Doe",
"avatar": "https://dock.us/avatar.png",
"email": "john.doe@example.com",
"name": "John Doe"
}
}
],
"pageInfo": {
"page": 1,
"pages": 10,
"total": 100,
"pageTotal": 10,
"hasNextPage": true,
"hasPrevPage": false
}
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "The request could not be understood or was missing required parameters"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Access denied. You are not authorized to access this resource"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Access to this resource is restricted"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource could not be found"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "The server has encountered a situation it does not know how to handle"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Page number
Number of results to return
Select the course properties to return. Courses return only id, object and url unless other properties are requested. Request creator.<property> (for example creator.email) to include the user who created the course; it always carries its id, object and url. transcript reads every published section, so request it only when you need the content
Available options:
name, description, courseUrl, isPublished, publishedAt, transcript, creator.id, creator.firstName, creator.lastName, creator.avatar, creator.email, creator.name, creator.createdAt, creator.updatedAt, createdAt, updatedAt Response
List of courses
Show child attributes
Show child attributes