API Documentation

Complete reference for the Cloudlinker API. Manage your clients, devices, and jobs programmatically with our RESTful API.

Base URL

https://cloudlinker.eu/api

All API requests should be made to this base URL

Basic Authentication

All API requests require basic authentication using an API key and an Organization ID. Include both fields in the request header:

Username: your_organization_id
Password: your_api_key
Content-Type: application/json

Connection Test

Test your API connection and authentication.

GET test

Test your API connection and verify authentication. Returns your organization ID if properly authenticated.

Example Response

{
    "organization_id": "0197df47-871f-72d1-95df-2bfb0c18529a"
}

This endpoint is perfect for testing if your external packages can properly connect to the CloudLinker API. If authentication fails, you will receive a 401 Unauthorized response instead of your organization ID.

Clients API

Manage your connected clients and their configurations.

POST clients/list

Retrieve a list of all devices associated with your account.

Query Parameters

hostname (optional) - Filter the results based on hostname
pagination (optional) - Number of results to return (default: 20)

Request Body

{
  "hostname": "LT", //optional, filters clients with hostname that starts with 'LT'
  "pagination": 20 //optional
}

Example Response

{
    "data": [
        {
            "id": "0197df47-871f-72d1-95df-2bfb0c18529a",
            "hostname": "LT-STESA",
            "ip_address": "10.5.0.2"
        }
    ],
    "links": {
        "first": "http://cloudlinker/api/clients/list?page=1",
        "last": "http://cloudlinker/api/clients/list?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/clients/list?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://cloudlinker/api/clients/list",
        "per_page": 20,
        "to": 1,
        "total": 1
    }
}

The data section contains a list of clients. It's capped to the maximum pagination limit. In case that there are more pages available you can use the links included to perform additional requests. This allows you to iterate through all results.

POST clients/create

Add a new client to your account. This is normally handled by the cloudlinker client software. But you can also choose to manually register all your clients.

Query Parameters

client_id (required) - ID of the client
hostname (required) - Hostname of the client
description (optional) - Description of the client, use your own interpretation
ip_address (required) - IP address of the client

Request Body

{
  "hostname": "your_clients_hostname",
  "description": "Your clients description",
  "ip_address": "192.168.1.101",
}

Example Response

{
    "data": {
        "id": "0197e078-c984-7383-9c82-94b2b96bbe20",
        "hostname": "LT-TEST",
        "description": "This is a test server",
        "ip_address": "192.168.1.123",
        "last_seen": null
    }
}

You need to store the returned ID value in your application. You will need this ID to launch a job request to this client.

POST clients/update

Update an existing client in your account. This is normally handled by the cloudlinker client software. But you can also choose to manually update your clients.

Query Parameters

hostname (optional) - Hostname of the client
description (optional) - Description of the client, use your own interpretation
ip_address (optional) - IP address of the client
last_seen (optional) - Timestamp in Y-m-d H:i:s format when the client was last active (last startup time or last job execution)

Request Body

{
    "hostname": "LT-NEWTEST",
    "description": "This is a second test server",
    "ip_address": "192.168.1.150",
    "last_seen": "2025-07-06 18:09:00"
}

Example Response

{
    "data": {
        "id": "0197e078-c984-7383-9c82-94b2b96bbe20",
        "hostname": "LT-NEWTEST",
        "description": "This is a second test server",
        "ip_address": "192.168.1.150",
        "last_seen": "2025-07-06 18:09:00"
    }
}

The updated client info will be returned.

POST clients/delete

Delete an existing client in your account.

Query Parameters

client_id (required) - ID of the client

Request Body

{
    "client_id": "0197e078-c984-7383-9c82-94b2b96bbe20"
}

Example Response

[]

The response will be empty

Devices API

Manage your connected devices and their configurations.

POST devices/list

Retrieve a list of all devices associated with a client.

Query Parameters

client_id (optional) - ID of the client
device_type (optional) - Type of the device. Printers have device type equal to 1. Other device types will be implemented in the future.
name (optional) - Filter by device name

Example Response

    {
    "data": [
        {
            "id": "0197df47-87f1-73fa-aa41-bbb623b0babe",
            "name": "Microsoft XPS Document Writer",
            "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
            "hardware_path": null,
            "additional_info": null
        },
        {
            "id": "0197df47-883a-7393-85dd-a123e0a9d120",
            "name": "AnyDesk Printer",
            "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
            "hardware_path": null,
            "additional_info": null
        }
    ],
    "links": {
        "first": "http://cloudlinker/api/devices/list?page=1",
        "last": "http://cloudlinker/api/devices/list?page=5",
        "prev": null,
        "next": "http://cloudlinker/api/devices/list?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 5,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=5",
                "label": "5",
                "active": false
            },
            {
                "url": "http://cloudlinker/api/devices/list?page=2",
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://cloudlinker/api/devices/list",
        "per_page": 2,
        "to": 2,
        "total": 9
    }
}
POST devices/create

Add a new device to a client within your account. This process is automatically done by the cloudlinker client software.

Query Parameters

client_id (required) - ID of the client
name (required) - Name of the device (for printers the printer name of the operating system will be used)
device_type (required) - Type of the device. Printers have device type equal to 1. Other device types will be implemented in the future.
hardware_path (optional) - For future use
additional_info (optional) - Can be used to store json data specific to the device, will be available for future use

Request Body

{
  "client_id": "0197e078-c984-7383-9c82-94b2b96bbe20"
  "name": "Microsoft Print to PDF2",
  "device_type": 1,
}

Example Response

{
    "data": {
        "id": "0197e09b-d974-7191-a978-9bf0daecef6b",
        "name": "Microsoft Print to PDF2",
        "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
        "hardware_path": null,
        "additional_info": null
    }
}
POST devices/update

Update an existing device form a client within your account.

Query Parameters

client_id (required) - ID of the client
device_id (required) - ID of the device
name (optional) - Name of the device.
hardware_path (optional) - For future use
additional_info (optional) - Can be used to store json data specific to the device, will be available for future use

Request Body

{
    "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
    "device_id: "0197e09b-d974-7191-a978-9bf0daecef6b",
    "name": "Microsoft Print to PDF3",
}

Example Response

{
    "data": {
        "id": "0197e09b-d974-7191-a978-9bf0daecef6b",
        "name": "Microsoft Print to PDF3",
        "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
        "hardware_path": null,
        "additional_info": null
    }
}
POST devices/delete

Remove a device from a client within your account.

Query Parameters

device_id (required) - ID of the device

Request Body

{
  "device_id": "0197e09b-d974-7191-a978-9bf0daecef6b"
}

Example Response

[]

An empty response is returned

Jobs API

Create and manage your cloudlinker jobs for your clients and devices.

POST jobs/list

Retrieve a list of all jobs in your account.

Query Parameters

client_id (optional) - ID of the client
device_id (optional) - ID of the device
job_type (optional) - Job Type ID (1 = PRINTJOB)
status (optional) - Status of the job (1=JOB CREATED, 2=JOB LAUNCHED, 3=JOB PENDING, 4=JOB COMPLETED, 5=JOB FAILED)

Example Response

{
  "success": true,
  "data": {
    "jobs": [
      {
        "id": "job_98765",
        "name": "Daily Backup",
        "device_id": "dev_12345",
        "status": "completed",
        "schedule": "0 2 * * *",
        "last_run": "2024-01-15T02:00:00Z",
        "next_run": "2024-01-16T02:00:00Z",
        "created_at": "2024-01-01T12:00:00Z"
      }
    ],
    "total": 15,
    "limit": 50,
    "offset": 0
  }
}
POST jobs/create

Create a new cloudlinker job.

Query Parameters

client_id (required) - ID of the client
device_id (required) - ID of the device
job_type (required) - Job Type ID (1 = PRINTJOB)
payload (required)
launch_immediately (optional) - true/false

Request Body

{
    "device_id": "0197df47-88ca-714f-bd34-372d53fb6fc5",
    "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
    "job_type" : 1,
    "payload": "{
                    "document_type": "pdf",
                    "document_url": "http://cloudlinker/test.pdf",
                    "copies": "1"
                }"
}

In order to perform a printjob you must specifiy a document type (PDF), document url and amount of copies in the payload of the job.
It's important to mention that the document url only needs to be reachable from the client that is running the cloudlinker software. So you can use internal network locations.

Example Response

{
"data": {
    "id": "0197e0aa-e9f3-7168-8504-ccffa0052376",
    "job_type": 1,
    "device_id": "0197df47-88ca-714f-bd34-372d53fb6fc5",
    "device_name": "Microsoft Print to PDF",
    "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
    "payload": "{\n  \"document_type\": \"pdf\",\n  \"document_url\": \"http://cloudlinker/storage/test.pdf\",\n  \"copies\": \"1\"\n}",
    "status": 1,
    "created_at": "2025-07-06T16:56:26.000000Z"
}

POST jobs/update

Update an existing cloudlinker job.

Query Parameters

job_id (required) - ID of the job
device_id (optional) - ID of the device (you can switch to another device of the same client)
payload (optional) - You can update the payload (document url, copies, ...)
launch_immediately (optional) - true/false
status (optional) - Status of the job (1=JOB CREATED, 2=JOB LAUNCHED, 3=JOB PENDING, 4=JOB COMPLETED, 5=JOB FAILED)

Request Body

{
    "job_id": "0197e0aa-e9f3-7168-8504-ccffa0052376",
    "payload": "{
                    "document_type": "pdf",
                    "document_url": "http://cloudlinker/test2.pdf",
                    "copies": "2"
                }"
}

Use this function to update the job payload before it's launched.

Example Response

{
    "data": {
        "id": "0197e0aa-e9f3-7168-8504-ccffa0052376",
        "job_type": 1,
        "device_id": "0197df47-88ca-714f-bd34-372d53fb6fc5",
        "device_name": "Microsoft Print to PDF",
        "client_id": "0197df47-871f-72d1-95df-2bfb0c18529a",
        "payload": "{\n  \"document_type\": \"pdf\",\n  \"document_url\": \"http://cloudlinker/storage/test2.pdf\",\n  \"copies\": \"2\"\n}",
        "status": 1,
        "created_at": "2025-07-06T16:56:26.000000Z"
    }
}

POST jobs/launch

Launch an existing cloudlinker job.

Query Parameters

job_id (required) - ID of the job

Request Body

{
    "job_id": "0197e0aa-e9f3-7168-8504-ccffa0052376",
}

Use this function to launch/relaunch an existing job. When creating new jobs you can specify the option 'launch_immediately' in order to launch just after creating the job

Example Response

[]

Empty response

POST jobs/delete

Delete an existing cloudlinker job.

Query Parameters

job_id (required) - ID of the job

Request Body

{
    "job_id": "0197e0aa-e9f3-7168-8504-ccffa0052376",
}

Use this function to delete an existing job.

Example Response

[]

Empty response

Error Codes

Common error responses you may encounter when using the API.

400 Bad Request

Invalid request parameters or malformed JSON.

401 Unauthorized

Invalid or missing API key.

404 Not Found

The requested resource does not exist.

429 Rate Limited

Too many requests. Please slow down your API calls.

500 Internal Server Error

An unexpected error occurred on our servers.

Rate Limits

To ensure fair usage, our API enforces rate limits on all endpoints.

Standard Plan

  • • 1,000 requests per hour
  • • 100 requests per minute
  • • Burst limit: 20 requests per 10 seconds

Pro Plan

  • • 10,000 requests per hour
  • • 500 requests per minute
  • • Burst limit: 100 requests per 10 seconds

Need Help?

Can't find what you're looking for? Our developer support team is here to help you integrate with the Cloudlinker API.