MENU navbar-image

Introduction

Welcome to the ServicePlanner API documentation.

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 account -> Modules and Koppelingen and Generate API token.

Addresses

APIs for managing addresses

list

requires authentication

Middels deze functie kunt u een lijst met adressen ophalen.

Indien de next_page_url aanwezig is zijn er meer pagina's met addressen. Adressen worden per 100 adressen teruggegeven.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/address';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
            'order_by' => 'updated_at',
            'order_direction' => 'asc',
        ],
        'json' => [
            'client_id' => 2026.273455565,
            'order_by' => 'id',
            'order_direction' => 'DESC',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/address?page=1&per_page=20&order_by=updated_at&order_direction=asc" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": 2026.273455565,
    \"order_by\": \"id\",
    \"order_direction\": \"DESC\"
}"

Example response (200):


{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "profitemp_id": null,
            "company_id": 1,
            "client_id": 2,
            "street": "Dorpstraat",
            "house_number": "1",
            "house_number_addition": null,
            "zipcode": "1234 XX",
            "city": "Amsterdam",
            "type": "invoice",
            "geocode_lat": "52.3599976",
            "geocode_lng": "4.8852188",
            "country_id": 157,
            "created_at": "2021-02-23T15:14:13.000000Z",
            "updated_at": "2021-05-04T07:50:09.000000Z",
            "old_address_id": 0,
            "deleted_at": null
        }
    ],
    "first_page_url": "https://service-planner-app.test/api/address?page=1",
    "from": 1,
    "next_page_url": "https://service-planner-app.test/api/address?page=2",
    "path": "https://service-planner-app.test/api/address",
    "per_page": 100,
    "prev_page_url": null,
    "to": 100
}
 

Request      

GET address

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   number  optional  

the page number. Example: 1

client_id   number  optional  

show only addresses of the client with this id.

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20

order_by   string  optional  

field to order by. Valid options are created_at, id, updated_at. Example: updated_at

order_direction   string  optional  

direction to order by. Valid options are asc, desc. Example: asc

Body Parameters

client_id   number  optional  

The id of an existing record in the clients table. Example: 2026.273455565

order_by   string  optional  

Example: id

Must be one of:
  • created_at
  • id
  • updated_at
order_direction   string  optional  

Example: DESC

Must be one of:
  • ASC
  • asc
  • DESC
  • desc

add

requires authentication

Middels deze functie is het mogelijk om een adres toe te voegen.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/address';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_id' => 7,
            'street' => 'Dorpstraat',
            'house_number' => '1',
            'house_number_addition' => 'A',
            'zipcode' => '6500AA',
            'city' => 'Nijmegen',
            'type' => 'work',
            'geocode_lat' => '52.3599976',
            'geocode_lng' => '4.8852188',
            'country_id' => 157,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/address" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": 7,
    \"street\": \"Dorpstraat\",
    \"house_number\": \"1\",
    \"house_number_addition\": \"A\",
    \"zipcode\": \"6500AA\",
    \"city\": \"Nijmegen\",
    \"type\": \"work\",
    \"geocode_lat\": \"52.3599976\",
    \"geocode_lng\": \"4.8852188\",
    \"country_id\": 157
}"

Request      

POST address

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

client_id   integer   

The id of the client. Example: 7

street   string  optional  

Example: Dorpstraat

house_number   string  optional  

Example: 1

house_number_addition   string  optional  

Example: A

zipcode   string  optional  

Example: 6500AA

city   string  optional  

Example: Nijmegen

type   string   

The type of the address. This is either invoice or work. Example: work

geocode_lat   string  optional  

Example: 52.3599976

geocode_lng   string  optional  

Example: 4.8852188

country_id   integer   

The id of the country. Use 157 for the Netherlands or 22 for Belgium. Example: 157

show

requires authentication

Middels deze functie kunt u meer informatie over een adres ophalen.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/address/34241';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/address/34241" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


{
 "id": ,
 "company_id": 1,
 "client_id": 1,
 "street": "Dorpstraat 1",
 "house_number": "",
 "house_number_addition": "",
 "zipcode": "1234 VM",
 "city": "Tegelen",
 "type": "invoice",
 "geocode_lat": "",
 "geocode_lng": "",
 "country_id": 157,
 "created_at": null,
 "updated_at": null,
 "old_address_id": 0,
 "deleted_at": null,
 "client": {
       "id": 1,
       "profitemp_id": 172,
       "company_id": 1632,
       "client_number": 8148,
       "gender": "M",
       "first_name": "Dhr.",
       "last_name": "aaaaa",
       "company_name": "",
       "email": null,
       "email_alternative": "",
       "email_invoice": null,
       "appointment_confirmation": 0,
       "phone": "",
       "phone_note": null,
       "phone_alternative": "",
       "phone_alternative_note": null,
       "note": "",
       "email_option": "",
       "work_address_same_as_invoice_address": 0,
       "add_contact_person": 0,
       "checked": null,
       "deleted_at": null,
       "created_at": null,
       "updated_at": null
 },
}
 

Request      

GET address/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the address. Example: 34241

Response

Response Fields

type   string   

The type of the address. This is either invoice or work.

update

requires authentication

Middels deze functie is het mogelijk om een adres te updaten.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/address/34241';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_id' => 8,
            'street' => 'Dorpstraat',
            'house_number' => '1',
            'house_number_addition' => 'A',
            'zipcode' => '6500AA',
            'city' => 'Nijmegen',
            'type' => 'work',
            'geocode_lat' => '52.3599976',
            'geocode_lng' => '4.8852188',
            'country_id' => 157,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.service-planner.nl/address/34241" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": 8,
    \"street\": \"Dorpstraat\",
    \"house_number\": \"1\",
    \"house_number_addition\": \"A\",
    \"zipcode\": \"6500AA\",
    \"city\": \"Nijmegen\",
    \"type\": \"work\",
    \"geocode_lat\": \"52.3599976\",
    \"geocode_lng\": \"4.8852188\",
    \"country_id\": 157
}"

Request      

PUT address/{id}

PATCH address/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the address. Example: 34241

Body Parameters

client_id   integer   

The id of the client. Example 1 Example: 8

street   string  optional  

Example: Dorpstraat

house_number   string  optional  

Example: 1

house_number_addition   string  optional  

Example: A

zipcode   string  optional  

Example: 6500AA

city   string  optional  

Example: Nijmegen

type   string   

The type of the address. This is either invoice or work. Example: work

geocode_lat   string  optional  

Example: 52.3599976

geocode_lng   string  optional  

Example: 4.8852188

country_id   integer   

The id of the country. Use 157 for the Netherlands or 22 for Belgium. Example: 157

delete

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/address/34241';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.service-planner.nl/address/34241" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Request      

DELETE address/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the address. Example: 34241

Appointments

APIs for managing appointments

list types

requires authentication

Middels deze functie kunnen alle afspraaksoorten worden opgehaald. Deze kunnen gebruikt worden bij aanmaken van items of maken van afspraken.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment/types';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/appointment/types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


[
{
  "id": 4927,
  "profitemp_id": null,
  "company_id": 1411,
  "name": "Auto inspectie",
  "location": "",
  "time": 30,
  "description": "het inspecteren van uw auto",
  "priority": 0,
  "max_distance": "",
  "publicly_visible": true,
  "created_at": "2021-11-17T09:08:48.000000Z",
  "updated_at": "2021-11-17T09:08:48.000000Z",
  "deleted_at": null
},
]
 

Request      

GET appointment/types

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Response

Response Fields

time   string   

The duration of the appointment type in minutes.

visitStatus

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment/31778/visit-status';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'status' => 'visited',
            'date' => '2025-01-01 10:10:10',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/appointment/31778/visit-status" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"visited\",
    \"date\": \"2025-01-01 10:10:10\"
}"

Request      

POST appointment/{id}/visit-status

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the appointment. Example: 31778

Body Parameters

status   string  optional  

required. Valid options are: visited, not_visited. Example: visited

date   dateTime  optional  

24h format optional. If not present, dateTime of the request is used. Example: 2025-01-01 10:10:10

list

requires authentication

Middels deze functie kunnen afspraken worden opgehaald

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'users[0]' => '1',
            'users[1]' => '2',
            'users[2]' => '3',
            'appointment_type[0]' => '1',
            'appointment_type[1]' => '2',
            'ordertype' => 'asc',
            'appointment_filter[0]' => 'beatae',
            'time_from' => '2024-01-01',
            'time_to' => '2025-01-01',
            'updated_from' => '2024-01-01',
            'updated_to' => '2025-01-01',
        ],
        'json' => [
            'updated_from' => '2025-12-19',
            'updated_to' => '2076-04-02',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/appointment?page=1&users[]=1&users[]=2&users[]=3&appointment_type[]=1&appointment_type[]=2&ordertype=asc&appointment_filter[]=beatae&time_from=2024-01-01&time_to=2025-01-01&updated_from=2024-01-01&updated_to=2025-01-01" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"updated_from\": \"2025-12-19\",
    \"updated_to\": \"2076-04-02\"
}"

Example response (200):


{
    "current_page": 2,
    "data": [
{
    "id": 12345,
    "company_id": ,
    "client_id": ,
    "appointment_type_id": ,
    "send_mail_to_client": "",
    "prepared_at": "2016-11-16",
    "planned_at": "2016-11-16",
    "send_confirmed_at": null,
    "send_at": "2016-11-16",
    "confirmed_at": null,
    "visited_at": "2020-08-11",
    "send_reminder_at": null,
    "send_reminder_2_at": null,
    "not_visited_at": null,
    "canceled_at": "2016-11-15",
    "drive_time": null,
    "time_from": "2016-11-16T09:00:00.000000Z",
    "time_to": "2016-11-16T10:00:00.000000Z",
    "time": 60,
    "plan_from": "2016-11-01T00:00:00.000000Z",
    "plan_to": "2016-11-30T23:59:59.000000Z",
    "plan_next_date": null,
    "address_geocode": null,
    "address_id": "",
    "description_intern": "",
    "description_client": null,
    "reminder_checked": null,
    "created_at": null,
    "updated_at": "2020-08-11T12:11:08.000000Z",
    "time_from_order": "2016-11-16 09:00:00",
    "plan_from_order": "2016-11-01 00:00:00",
    "appointment_type": {
    "id": 1677,
    "company_id": ,
    "name": "Onderhoud",
    "location": "",
    "time": 0,
    "description": "",
    "priority": 0,
    "max_distance": "",
    "created_at": "2020-08-11T09:46:24.000000Z",
    "updated_at": "2020-08-11T09:46:24.000000Z"
},
    "services": [
   {
       "id": ,
       "client_id": ,
       "company_id": ,
       "item_category_id": null,
       "address_id": ,
       "name": "TopLine Compact HRC 30/CW5",
       "time": "55",
       "appointment_type_id": 1677,
       "user_id": 0,
       "recurring": 1,
       "plan_cycle": "24",
       "date_from": "2019-03-01T00:00:00.000000Z",
       "date_to": null,
       "plan_next_date": null,
       "reminders": "",
       "contract": "Onderhoud 2jr",
       "note": "Garantie tot:  17-6-2024",
       "created_at": "2020-08-11T09:46:26.000000Z",
       "updated_at": null,
       "pivot": {
       "appointment_id": 282331,
       "service_id": 114511
   },
       "checklists": []
   }
  ],
      "client": {
      "id": ,
      "company_id": ,
      "client_number": 8145,
      "gender": "M",
      "first_name": "Fam.",
      "last_name": "aaaa",
      "company_name": "",
      "email": null,
      "email_alternative": "",
      "email_invoice": null,
      "appointment_confirmation": 0,
      "phone": "",
      "phone_note": null,
      "phone_alternative": "",
      "phone_alternative_note": null,
      "note": "",
      "email_option": "",
      "work_address_same_as_invoice_address": 0,
      "add_contact_person": 0,
      "checked": null,
      "deleted_at": null,
      "created_at": null,
      "updated_at": null
   },
      "work_orders": [],
      "address": {
      "id": ,
      "company_id": ,
      "client_id": ,
      "street": "street 18",
      "house_number": "",
      "house_number_addition": "",
      "zipcode": "1234 TH",
      "city": "plaats",
      "type": "work",
      "geocode_lat": "51.----",
      "geocode_lng": "6.000",
      "country_id": 157,
      "created_at": null,
      "updated_at": null,
      "old_address_id": 0,
      "deleted_at": null
   }
  }
],
    "first_page_url": "....api/appointment?page=1",
    "from": 2,
    "last_page": 158,
    "last_page_url": "....api/appointment?page=158",
    "next_page_url": "....api/appointment?page=3",
    "path": "....api/appointment",
    "per_page": "1",
    "prev_page_url": "....api/appointment?page=1",
    "to": 2,
    "total": 158
}
 

Request      

GET appointment

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

the page number. Example: 1

users   integer[]  optional  

a list with id's of the employees.

client_id   integer  optional  

the id of a client.

appointment_type   integer[]  optional  

appointment type id.

order   string  optional  

The field for sorting appointments. Available options are id, appointment_type_id, time_from, time, client_id, address_id, status, updated_at, created_at.

ordertype   string  optional  

Sorting by ascending or descending. Available options are asc and desc. Example: asc

appointment_filter   string[]  optional  

Available options are prepared, ready_to_send, send, invited, confirmed, visited, canceled, backlog, to_plan, not_visited.

time_from   string  optional  

The start date of the appointment. The format should be Y-m-d. Example: 2024-01-01

time_to   string  optional  

The end date of the appointment. The format should be Y-m-d. time_to should be after or equal to time_from. Example: 2025-01-01

updated_from   string  optional  

The start updated_at date of the appointment. The format should be Y-m-d. Example: 2024-01-01

updated_to   string  optional  

The end updated_at date of the appointment. The format should be Y-m-d. updated_to should be after or equal to updated_from. Example: 2025-01-01

Body Parameters

updated_from   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-19

updated_to   string  optional  

Must be a valid date in the format Y-m-d. value moet een datum na of gelijk aan updated_from zijn. Example: 2076-04-02

add

requires authentication

Middels deze functie is het mogelijk om een afspraak toe te voegen.
Gebruik bij voorkeur *plan_appointment:false

Wilt u uitnodigingen versturen? zet service op invite met appointment_or_invite:'invite'! daarna deze functie met de volgende opties: send_mail_to_client:"direct",plan_appointment:false en / appointment_or_invite op invite

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'appointment_type_id' => 1,
            'client_id' => 2,
            'address_id' => 3,
            'time' => '60',
            'send_mail_to_client' => 'default',
            'plan_appointment' => true,
            'appointment_or_invite' => 'appointment',
            'services' => [
                1,
                5,
                1337,
            ],
            'users' => [
                2,
                3,
                1986,
            ],
            'description_intern' => 'client likes a when you call before arrival',
            'description_client' => 'please make room for...',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/appointment" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"appointment_type_id\": 1,
    \"client_id\": 2,
    \"address_id\": 3,
    \"time\": \"60\",
    \"send_mail_to_client\": \"default\",
    \"plan_appointment\": true,
    \"appointment_or_invite\": \"appointment\",
    \"services\": [
        1,
        5,
        1337
    ],
    \"users\": [
        2,
        3,
        1986
    ],
    \"description_intern\": \"client likes a when you call before arrival\",
    \"description_client\": \"please make room for...\"
}"

Example response (200):


{
    "appointment_type_id": 1077,
    "client_id": 91341,
    "company_id": 1488,
    "time_from": "2021-03-01T15:13:35.000000Z",
    "time_to": "2021-03-01T15:13:35.000000Z",
    "time": 2021,
    "plan_from": "2021-03-01T15:13:35.000000Z",
    "plan_to": "2021-03-01T15:13:35.000000Z",
    "updated_at": "2021-03-09T09:40:09.000000Z",
    "created_at": "2021-03-09T09:40:09.000000Z",
    "appointment_or_invite": "appointment",
    "id": 466253
}
 

Request      

POST appointment

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

appointment_type_id   integer   

The id of the appointment type. Example: 1

client_id   integer   

The id of the client. Example: 2

address_id   integer   

The id of the address. Example: 3

time   string   

The time of the appointment in minutes. Example: 60

send_mail_to_client   string   

Mail option. Available options are: never, direct or default. Example: default

plan_appointment   boolean  optional  

optional. Available options are: true, false default is true. Example: true

appointment_or_invite   optional.  optional  

Available options are: appointment, invite default is appointment. Example: appointment

services   integer[]  optional  

optional A list of services (items).

users   integer[]  optional  

optional A list of users (employees).

description_intern   string  optional  

for intern use. Example: client likes a when you call before arrival

description_client   string  optional  

visible for client. Example: please make room for...

show

requires authentication

Middels deze functie kunt u meer informatie over een afspraak ophalen.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment/31778';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/appointment/31778" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


{
"id": ,
"company_id": ,
"client_id": 804355,
"appointment_type_id": 2176,
"send_mail_to_client": "",
"prepared_at": "2016-11-16",
"planned_at": "2016-11-16",
"send_confirmed_at": null,
"send_at": "2016-11-16",
"confirmed_at": null,
"visited_at": "2020-08-11",
"send_reminder_at": null,
"send_reminder_2_at": null,
"not_visited_at": null,
"canceled_at": "2016-11-15",
"drive_time": null,
"time_from": "2016-11-16T09:00:00.000000Z",
"time_to": "2016-11-16T10:00:00.000000Z",
"time": 60,
"plan_from": "2016-11-01T00:00:00.000000Z",
"plan_to": "2016-11-30T23:59:59.000000Z",
"plan_next_date": null,
"address_geocode": null,
"address_id": "",
"description_intern": "",
"description_client": null,
"reminder_checked": null,
"created_at": null,
"updated_at": "2020-08-11T12:11:08.000000Z",
"status_system": "canceled",
"work_orders": [],
"field_values": [],
"work_order": null,
"client": {
"id": 158816,
"profitemp_id": 172,
"company_id": 1632,
"client_number": 8145,
"gender": "M",
"first_name": "Fam.",
"last_name": "Hendrix",
"company_name": "",
"email": null,
"email_alternative": "",
"email_invoice": null,
"appointment_confirmation": 0,
"phone": "",
"phone_note": null,
"phone_alternative": "",
"phone_alternative_note": null,
"note": "",
"email_option": "",
"work_address_same_as_invoice_address": 0,
"add_contact_person": 0,
"checked": null,
"deleted_at": null,
"created_at": null,
"updated_at": null
},
     "appointment_type": {},
     "address": {},
     "checklists": [],
     "services": [{}}],
     "users": [{}}],
     "company": {}
}
 

Request      

GET appointment/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the appointment. Example: 31778

delete

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/appointment/31778';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.service-planner.nl/appointment/31778" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Request      

DELETE appointment/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the appointment. Example: 31778

Clients

APIs for managing clients

list

requires authentication

Middels deze functie kunt u een lijst met klanten ophalen.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
            'search' => 'John Doe',
            'client_number' => '123456789',
            'order' => 'client_number',
            'ordertype' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/clients?page=1&per_page=20&search=John+Doe&client_number=123456789&order=client_number&ordertype=asc" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET clients

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

page number. Example: 1

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20

search   string  optional  

search for a client by name. Example: John Doe

client_number   string  optional  

search for a client by client number. Example: 123456789

order   string  optional  

sort results by a field. Valid options are id, client_number, first_name, last_name, email, created_at, updated_at. Example: client_number

ordertype   string  optional  

sort order. Valid options are asc, desc. Required if sort is set. Example: asc

add

requires authentication

Middels deze functie is het mogelijk om een client toe te voegen.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_number' => 18,
            'gender' => 'm-f',
            'first_name' => 'John',
            'last_name' => 'Doe',
            'company_name' => 'John Doe',
            'email' => 'example@service-planner.nl',
            'mobile_phone' => '0612345678',
            'phone' => '0612345678',
            'address' => [
                'quia',
                'invoice' => [
                    'zipcode' => '1234AB',
                    'house_number' => '12',
                    'street' => 'Street',
                    'city' => 'City',
                    'country_id' => '157',
                    'house_number_addition' => 'A',
                ],
                'work' => [
                    'zipcode' => '1234AB',
                    'house_number' => '12',
                    'street' => 'Street',
                    'city' => 'City',
                    'country_id' => '157',
                    'house_number_addition' => 'A',
                ],
            ],
            'contactPerson' => [
                'illo',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/clients" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_number\": 18,
    \"gender\": \"m-f\",
    \"first_name\": \"John\",
    \"last_name\": \"Doe\",
    \"company_name\": \"John Doe\",
    \"email\": \"example@service-planner.nl\",
    \"mobile_phone\": \"0612345678\",
    \"phone\": \"0612345678\",
    \"address\": {
        \"0\": \"quia\",
        \"invoice\": {
            \"zipcode\": \"1234AB\",
            \"house_number\": \"12\",
            \"street\": \"Street\",
            \"city\": \"City\",
            \"country_id\": \"157\",
            \"house_number_addition\": \"A\"
        },
        \"work\": {
            \"zipcode\": \"1234AB\",
            \"house_number\": \"12\",
            \"street\": \"Street\",
            \"city\": \"City\",
            \"country_id\": \"157\",
            \"house_number_addition\": \"A\"
        }
    },
    \"contactPerson\": [
        \"illo\"
    ]
}"

Request      

POST clients

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

client_number   integer  optional  

A unique identifier of the client. Only numbers allowed Example: 18

gender   string  optional  

m, f, m-f, fam, afd. Example: m-f

first_name   string  optional  

The first name of the client. Example: John

last_name   string  optional  

The last name of the client. Example: Doe

company_name   string  optional  

The name of the company. Example: John Doe

email   string  optional  

The email of the client. Example: example@service-planner.nl

mobile_phone   string  optional  

The mobile phone of the client. Example: 0612345678

phone   string  optional  

The phone of the client. Example: 0612345678

address   string[]  optional  

The work/invoice address of the client.

invoice   object  optional  
zipcode   string  optional  

The zipcode of the invoice address. Example: 1234AB

house_number   string  optional  

The house number of the invoice address. Example: 12

street   string  optional  

The street of the invoice address. Example: Street

city   string  optional  

The city of the invoice address. Example: City

country_id   string  optional  

Use 157 for the Netherlands or 22 for Belgium. Example: 157

house_number_addition   string  optional  

The house number addition of the invoice address. Example: A

work   object  optional  
zipcode   string  optional  

The zipcode of the work address. Example: 1234AB

house_number   string  optional  

The house number of the work address. Example: 12

street   string  optional  

The street of the work address. Example: Street

city   string  optional  

The city of the work address. Example: City

country_id   string  optional  

Use 157 for the Netherlands or 22 for Belgium. Example: 157

house_number_addition   string  optional  

The house number addition of the work address. Example: A

contactPerson   string[]  optional  
name   string  optional  

The name of the contact person. Example: John Doe

email   string   

The email of the contact person.

show

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/excepturi';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/clients/excepturi" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


{
 "id": 4,
 "name": "Jessica Jones",
 ....,
 "appointments": [ ...],
 "addresses": [ ...],
 "offers": [ ...],
 "invoices": [ ...],
 "addresses": [ ...],
}
 

Request      

GET clients/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the client. Example: excepturi

update

requires authentication

Middels deze functie is het mogelijk om een client up te daten

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/voluptate';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_number' => 'facilis',
            'gender' => 'unde',
            'first_name' => 'quae',
            'last_name' => 'officiis',
            'company_name' => 'impedit',
            'email' => 'gwaelchi@example.org',
            'mobile_phone' => 'autem',
            'phone' => 'aut',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.service-planner.nl/clients/voluptate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_number\": \"facilis\",
    \"gender\": \"unde\",
    \"first_name\": \"quae\",
    \"last_name\": \"officiis\",
    \"company_name\": \"impedit\",
    \"email\": \"gwaelchi@example.org\",
    \"mobile_phone\": \"autem\",
    \"phone\": \"aut\"
}"

Request      

PUT clients/{id}

PATCH clients/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the client. Example: voluptate

Body Parameters

client_number   string  optional  

A unique identifier of the client. required Example: facilis

gender   string  optional  

m, f, m-f, fam, afd Example: unde

first_name   string  optional  

Example: quae

last_name   string  optional  

Example: officiis

company_name   string  optional  

Example: impedit

email   string  optional  

Example: gwaelchi@example.org

mobile_phone   string  optional  

Example: autem

phone   string  optional  

Example: aut

delete

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/rerum';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.service-planner.nl/clients/rerum" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Request      

DELETE clients/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the client. Example: rerum

list items

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/corrupti/services';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/clients/corrupti/services" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET clients/{client}/services

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client   string   

The client. Example: corrupti

create item

requires authentication

Create a new item for the client. Example Attachments php: 'attachments[]'=> new CURLFILE('/C:/Users/XXXXX/Downloads/Checklist_5750-1.pdf')

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/nihil/services';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address_id' => 14,
            'name' => 'u',
            'appointment_type_id' => 11,
            'time_different' => false,
            'time' => 18,
            'recurring' => true,
            'plan_cycle' => 5,
            'date_from' => '2025-12-19T13:16:10',
            'date_to' => '2025-12-19T13:16:10',
            'appointment_or_invite' => 'appointment',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/clients/nihil/services" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address_id\": 14,
    \"name\": \"u\",
    \"appointment_type_id\": 11,
    \"time_different\": false,
    \"time\": 18,
    \"recurring\": true,
    \"plan_cycle\": 5,
    \"date_from\": \"2025-12-19T13:16:10\",
    \"date_to\": \"2025-12-19T13:16:10\",
    \"appointment_or_invite\": \"appointment\"
}"

Request      

POST clients/{client}/services

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client   string   

The client. Example: nihil

Body Parameters

address_id   integer   

The id of the address. The id of an existing record in the addresses table. Example: 14

name   string   

The name of the item. value mag niet uit meer dan 255 tekens bestaan. Example: u

appointment_type_id   integer   

The id of the appointment type. The id of an existing record in the appointment_types table. Example: 11

time_different   boolean  optional  

Example: false

time   integer   

Duration in minutes. Example: 18

recurring   boolean  optional  

Set to true to plan this item automatilcy. Example: true

plan_cycle   integer  optional  

Plan cycle in months. This field is required when recurring is 1. Example: 5

date_from   string  optional  

Start date for recurring planning. value moet een datum bevatten. Example: 2025-12-19T13:16:10

date_to   string  optional  

End date of recurring planning, can be null. value moet een datum bevatten. Example: 2025-12-19T13:16:10

appointment_or_invite   string  optional  

Example: appointment

Must be one of:
  • appointment
  • invite
attachments   object  optional  

show item

requires authentication

Middels deze functie kunt u meer informatie over het item vinden van de client.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/error/services/assumenda';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/clients/error/services/assumenda" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


{
    "id": 258530,
    "profitemp_id": null,
    "client_id": 335816,
    "company_id": 1411,
    "item_category_id": null,
    "address_id": 578863,
    "name": "test",
    "time": "60",
    "appointment_type_id": 4789,
    "user_id": 0,
    "recurring": null,
    "plan_cycle": "12",
    "date_from": null,
    "date_to": null,
    "plan_next_date": null,
    "reminders": null,
    "contract": null,
    "note": null,
    "created_at": "2022-01-11T08:13:09.000000Z",
    "updated_at": "2022-01-11T08:13:47.000000Z",
    "deleted_at": null,
    "comments": [
        {
            "id": 97382,
            "service_id": 258530,
            "user_id": 26502,
            "description": "test",
            "created_at": "2022-01-11T08:13:39.000000Z",
            "updated_at": "2022-01-11T08:13:39.000000Z"
        },
        {
            "id": 97383,
            "service_id": 258530,
            "user_id": 26502,
            "description": "test",
            "created_at": "2022-01-11T08:13:47.000000Z",
            "updated_at": "2022-01-11T08:13:47.000000Z"
        }
    ]
}
 

Request      

GET clients/{client}/services/{service}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client   string   

The client. Example: error

service   string   

The service. Example: assumenda

update item

requires authentication

Create a new item for the client. Example Attachments php: 'attachments[]'=> new CURLFILE('/C:/Users/XXXXX/Downloads/Checklist_5750-1.pdf')

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/laborum/services/quod';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address_id' => 16,
            'name' => 'fviqspmckczqgox',
            'time_different' => true,
            'appointment_type_id' => 3,
            'time' => 20,
            'recurring' => false,
            'plan_cycle' => 4,
            'date_from' => '2025-12-19T13:16:10',
            'date_to' => '2025-12-19T13:16:10',
            'appointment_or_invite' => 'invite',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.service-planner.nl/clients/laborum/services/quod" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address_id\": 16,
    \"name\": \"fviqspmckczqgox\",
    \"time_different\": true,
    \"appointment_type_id\": 3,
    \"time\": 20,
    \"recurring\": false,
    \"plan_cycle\": 4,
    \"date_from\": \"2025-12-19T13:16:10\",
    \"date_to\": \"2025-12-19T13:16:10\",
    \"appointment_or_invite\": \"invite\"
}"

Request      

PUT clients/{client}/services/{service}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client   string   

The client. Example: laborum

service   string   

The service. Example: quod

Body Parameters

address_id   integer   

The id of an existing record in the addresses table. Example: 16

name   string   

value mag niet uit meer dan 255 tekens bestaan. Example: fviqspmckczqgox

time_different   boolean  optional  

Example: true

appointment_type_id   integer   

The id of an existing record in the appointment_types table. Example: 3

time   integer   

Example: 20

recurring   boolean  optional  

Example: false

plan_cycle   integer  optional  

This field is required when recurring is 1. Example: 4

date_from   string  optional  

value moet een datum bevatten. Example: 2025-12-19T13:16:10

date_to   string  optional  

value moet een datum bevatten. Example: 2025-12-19T13:16:10

appointment_or_invite   string  optional  

Example: invite

Must be one of:
  • appointment
  • invite

add attachments

requires authentication

Example Attachments php: 'attachments[]'=> new CURLFILE('/C:/Users/XXXXX/Downloads/Checklist_5750-1.pdf')

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/clients/laborum/services/ut/attachments';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
        ],
        'multipart' => [
            [
                'name' => 'delete_attachments',
                'contents' => '1'
            ],
            [
                'name' => 'attachments[]',
                'contents' => fopen('/tmp/phpQ0RZGf', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/clients/laborum/services/ut/attachments" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "delete_attachments=1"\
    --form "attachments[]=@/tmp/phpQ0RZGf" 

Request      

POST clients/{client}/services/{service}/attachments

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

client   string   

The client. Example: laborum

service   string   

The service. Example: ut

Body Parameters

delete_attachments   boolean  optional  

Example: true

attachments   file[]   

Must be a file. value mag niet meer dan 20000 kilobytes zijn.

Endpoints

GET company-redirect/{page?}

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/company-redirect/Slo';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/company-redirect/Slo" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (302):

Show headers
cache-control: no-cache, private
location: https://app.service-planner.nl/company-redirect/Slo
content-type: text/html; charset=utf-8
 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="0;url='https://app.service-planner.nl/company-redirect/Slo'" />

        <title>Redirecting to https://app.service-planner.nl/company-redirect/Slo</title>
    </head>
    <body>
        Redirecting to <a href="https://app.service-planner.nl/company-redirect/Slo">https://app.service-planner.nl/company-redirect/Slo</a>.
    </body>
</html>
 

Request      

GET company-redirect/{page?}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

page   string  optional  

Example: Slo

GET /

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET /

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

list

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/materials';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'name' => 'Chineeshoedje',
            'article_nr' => '1',
            'article_number' => '1',
            'search' => 'Chinees',
            'order_by' => 'article_nr',
        ],
        'json' => [
            'article_number' => 31526612.6,
            'article_nr' => 53.03638745,
            'name' => 'eofxsqcldheyq',
            'search' => 'cgsyksdwtv',
            'order_by' => 'price',
            'order_direction' => 'ASC',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/materials?per_page=20&page=1&name=Chineeshoedje&article_nr=1&article_number=1&search=Chinees&order_by=article_nr" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"article_number\": 31526612.6,
    \"article_nr\": 53.03638745,
    \"name\": \"eofxsqcldheyq\",
    \"search\": \"cgsyksdwtv\",
    \"order_by\": \"price\",
    \"order_direction\": \"ASC\"
}"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET materials

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20

page   integer  optional  

page number. Example: 1

name   string  optional  

string. Example: Chineeshoedje

article_nr   string  optional  

integer. Example: 1

article_number   string  optional  

integer. Example: 1

search   string  optional  

string. Example: Chinees

order_by   string  optional  

field to order by. Valid options are article_nr, article_number, name, price. Example: article_nr

Body Parameters

article_number   number  optional  

Example: 31526612.6

article_nr   number  optional  

Example: 53.03638745

name   string  optional  

value mag niet uit meer dan 255 tekens bestaan. Example: eofxsqcldheyq

search   string  optional  

value mag niet uit meer dan 255 tekens bestaan. Example: cgsyksdwtv

order_by   string  optional  

Example: price

Must be one of:
  • article_number
  • article_nr
  • name
  • price
order_direction   string  optional  

Example: ASC

Must be one of:
  • ASC
  • asc
  • DESC
  • desc

create

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/materials';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'name' => 'Chineeshoedje',
            'article_nr' => '1',
            'ledger_account_id' => '1',
            'vat_rate' => '21',
        ],
        'json' => [
            'article_nr' => 18,
            'name' => 'sit',
            'price' => '3.3',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.service-planner.nl/materials?name=Chineeshoedje&article_nr=1&ledger_account_id=1&vat_rate=21" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"article_nr\": 18,
    \"name\": \"sit\",
    \"price\": \"3.3\"
}"

Request      

POST materials

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

name   string  optional  

required. Example: Chineeshoedje

article_nr   integer   

unique. Example: 1

ledger_account_id   integer  optional  

optional if vat_rate. Example: 1

vat_rate   integer  optional  

option if ledger_account_id. Example: 21

Body Parameters

article_nr   integer   

Example: 18

name   string   

Example: sit

price   string   

Must match the regex /^[-+]?\d+(.\d{1,2})?$/. Example: 3.3

ledger_account_id   string  optional  

This field is required when vat_rate is not present.

vat_rate   string  optional  

This field is required when ledger_account_id is not present.

GET materials/{id}

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/materials/quibusdam';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/materials/quibusdam" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET materials/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the material. Example: quibusdam

update

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/materials/commodi';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'name' => 'Chineeshoedje',
            'article_nr' => '1',
            'ledger_account_id' => '1',
            'vat_rate' => '21',
        ],
        'json' => [
            'article_nr' => 4,
            'name' => 'quis',
            'price' => '82311.9',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.service-planner.nl/materials/commodi?name=Chineeshoedje&article_nr=1&ledger_account_id=1&vat_rate=21" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"article_nr\": 4,
    \"name\": \"quis\",
    \"price\": \"82311.9\"
}"

Request      

PUT materials/{id}

PATCH materials/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the material. Example: commodi

Query Parameters

name   string  optional  

string. Example: Chineeshoedje

article_nr   integer  optional  

unique. Example: 1

ledger_account_id   integer  optional  

optional if vat_rate. Example: 1

vat_rate   integer  optional  

option if ledger_account_id. Example: 21

Body Parameters

article_nr   integer   

Example: 4

name   string   

Example: quis

price   string   

Must match the regex /^[-+]?\d+(.\d{1,2})?$/. Example: 82311.9

ledger_account_id   string  optional  

This field is required when vat_rate is not present.

vat_rate   string  optional  

This field is required when ledger_account_id is not present.

delete

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/materials/repellendus';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.service-planner.nl/materials/repellendus" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Request      

DELETE materials/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the material. Example: repellendus

Invoices

APIs for managing invoices

list

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/invoices';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'created_at' => 'YYYY-MM-DD',
            'updated_at' => 'YYYY-MM-DD',
            'invoice_date' => 'YYYY-MM-DD',
            'invoice_date_from' => 'YYYY-MM-DD',
            'invoice_date_to' => 'YYYY-MM-DD',
            'invoice_number' => 'PKF00000000',
        ],
        'json' => [
            'invoice_date' => '2025-12-19',
            'invoice_date_from' => '2025-12-19',
            'invoice_date_to' => '2084-01-19',
            'invoice_expiration_date' => '2025-12-19',
            'invoice_expiration_date_from' => '2025-12-19',
            'invoice_expiration_date_to' => '2068-11-05',
            'invoice_number' => 'dolore',
            'client' => [
                'first_name' => 'junbadzrgwctpxxlwcxpz',
                'last_name' => 'hgyjxo',
                'company_name' => 'xhrrrl',
                'email' => 'dickinson.palma@example.com',
                'client_number' => 187.4,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/invoices?per_page=20&page=1&created_at=YYYY-MM-DD&updated_at=YYYY-MM-DD&invoice_date=YYYY-MM-DD&invoice_date_from=YYYY-MM-DD&invoice_date_to=YYYY-MM-DD&invoice_number=PKF00000000" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"invoice_date\": \"2025-12-19\",
    \"invoice_date_from\": \"2025-12-19\",
    \"invoice_date_to\": \"2084-01-19\",
    \"invoice_expiration_date\": \"2025-12-19\",
    \"invoice_expiration_date_from\": \"2025-12-19\",
    \"invoice_expiration_date_to\": \"2068-11-05\",
    \"invoice_number\": \"dolore\",
    \"client\": {
        \"first_name\": \"junbadzrgwctpxxlwcxpz\",
        \"last_name\": \"hgyjxo\",
        \"company_name\": \"xhrrrl\",
        \"email\": \"dickinson.palma@example.com\",
        \"client_number\": 187.4
    }
}"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET invoices

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20

page   integer  optional  

page number. Example: 1

created_at   string  optional  

date. Example: YYYY-MM-DD

updated_at   string  optional  

date. Example: YYYY-MM-DD

invoice_date   string  optional  

date. Example: YYYY-MM-DD

invoice_date_from   string  optional  

date. Example: YYYY-MM-DD

invoice_date_to   string  optional  

date. Example: YYYY-MM-DD

invoice_number   string  optional  

string. Example: PKF00000000

Body Parameters

invoice_date   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-19

invoice_date_from   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-19

invoice_date_to   string  optional  

Must be a valid date in the format Y-m-d. value moet een datum na of gelijk aan invoice_date_from zijn. Example: 2084-01-19

invoice_expiration_date   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-19

invoice_expiration_date_from   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-19

invoice_expiration_date_to   string  optional  

Must be a valid date in the format Y-m-d. value moet een datum na of gelijk aan invoice_expiration_date_from zijn. Example: 2068-11-05

invoice_number   string  optional  

Example: dolore

client   object  optional  
first_name   string  optional  

value mag niet uit meer dan 255 tekens bestaan. Example: junbadzrgwctpxxlwcxpz

last_name   string  optional  

value mag niet uit meer dan 255 tekens bestaan. Example: hgyjxo

company_name   string  optional  

value mag niet uit meer dan 255 tekens bestaan. Example: xhrrrl

email   string  optional  

value is geen geldig e-mailadres. value mag niet uit meer dan 255 tekens bestaan. Example: dickinson.palma@example.com

client_number   number  optional  

Example: 187.4

show

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/invoices/quo';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/invoices/quo" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET invoices/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the invoice. Example: quo

Items

APIs for managing items

list

requires authentication

Middels deze functie kunt u een lijst met items ophalen.

Indien de next_page_url aanwezig is zijn er meer pagina's met items. Items worden per 100 items teruggegeven.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/service';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/service?page=1&per_page=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):


{
  "current_page": 1,
  "data": [
  {
     "id": 1,
     "profitemp_id": null,
     "company_id": 1,
     "item_category_id": 2,
     "address_id": "Dorpstraat",
     "name": "Piano",
     "time": 30,
     "appointment_type_id": 1,
     "user_id": 0,
     "recurring": true,
     "plan_cycle": 12,
     "date_from": "2022-02-15",
     "date_to": "2022-02-15",
     "plan_next_date": "2022-02-23",
     "reminders": "Stemmer meenemen",
     "contract": null,
     "appointment_or_invite":"invite"
     "note": null,
  }
  ],
  "first_page_url": "https:\/\/service-planner-app.test\/api\/client?page=1",
  "from": 1,
  "next_page_url": "https:\/\/service-planner-app.test\/api\/client?page=2",
  "path": "https:\/\/service-planner-app.test\/api\/client",
  "per_page": 100,
  "prev_page_url": null,
  "to": 100
}
 

Request      

GET service

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

the page number. Example: 1

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20

client_id   integer  optional  

show only items of this client.

delete

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/service/amet';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.service-planner.nl/service/amet" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Request      

DELETE service/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the service. Example: amet

Users

APIs for managing users

list

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.service-planner.nl/user';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.service-planner.nl/user?page=1&per_page=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Unauthenticated."
}
 

Request      

GET user

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

the page number. Example: 1

per_page   integer  optional  

number of results per page. Valid options are 20, 100, 200, 500, 1000. Example: 20