Skip to content

Commit f7283f8

Browse files
espenclaude
andcommitted
Correct documentation errors found in implementation review
Fix discrepancies against the current implementation: recurring rdate/exdate format, booking listing filters and start/end semantics, service types and sellable listings, attribute types and required flags, missing serialized attributes, public slots response shape, CORS prerequisite, verification code status, six digit SMS token and outdated locale lists. Switch private API examples to Bearer auth. Also split the pagination guide into Pagination and a new Example Requests guide. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ARj1YRv8rDzdq8SHKpMHrT
1 parent 752579f commit f7283f8

27 files changed

Lines changed: 221 additions & 143 deletions

‎_endpoints/account.md‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,31 @@ Information and settings for your account.
1818
<tr><td>google_analytics</td><td>String</td><td></td></tr>
1919
<tr><td>css_url</td><td>String</td><td></td></tr>
2020
<tr><td>time_zone</td><td>String</td><td>Required</td></tr>
21-
<tr><td>verification_method</td><td>Integer</td><td></td></tr>
21+
<tr><td>verification_method</td><td>String</td><td>Values: no_verification, email, sms, authenticated, id_porten, vipps.</td></tr>
2222
<tr><td>address</td><td>String</td><td></td></tr>
2323
<tr><td>country_code</td><td>String</td><td>Required. ISO 3166-1 alpha-2.</td></tr>
2424
<tr><td>logo</td><td>File</td><td></td></tr>
25-
<tr><td>template</td><td>Integer</td><td>Required</td></tr>
25+
<tr><td>template</td><td>String</td><td>Values: amsterdam, lviv, timisoara.</td></tr>
2626
<tr><td>service_template</td><td>String</td><td></td></tr>
27-
<tr><td>locale</td><td>String</td><td>Required. Supported locales: 'en', 'sv' and 'nb'. Default: 'en'.</td></tr>
28-
<tr><td>currency</td><td>String</td><td>ISO4217 currency code</td></tr>
27+
<tr><td>locale</td><td>String</td><td>Required. Supported locales: cs, da, de, en, en-GB, en-US, es, fr, he, it, lt, lv, ms, nb, nl, pl, ru, sl, sq, sv. Default: 'en'.</td></tr>
28+
<tr><td>currency</td><td>String</td><td>Required. ISO4217 currency code</td></tr>
2929
<tr><td>email_notification</td><td>Boolean</td><td></td></tr>
3030
<tr><td>mail_notification_recipient</td><td>Email</td><td></td></tr>
3131
<tr><td>sms_notification</td><td>Boolean</td><td></td></tr>
3232
<tr><td>phone_number</td><td>String</td><td></td></tr>
3333
<tr><td>confirm_manually</td><td>Boolean</td><td></td></tr>
34-
<tr><td>settings</td><td>Array</td><td></td></tr>
34+
<tr><td>settings</td><td>Object</td><td>Key/value. Stored as strings.</td></tr>
3535
<tr><td>public_access</td><td>Boolean</td><td></td></tr>
3636
<tr><td>interval_rounding</td><td>Integer</td><td>Default setting for all services for rounding to next available time. '15' will round 10:07 to become 10:15 as next available slot time.</td></tr>
3737
<tr><td>slot_generation</td><td>String</td><td>Default: dynamic. Values: dynamic (next available), fixed.</td></tr>
3838
<tr><td>future_bookable_period</td><td>String</td><td>Natural language date/time relative to current time.</td></tr>
3939
<tr><td>first_bookable_period</td><td>String</td><td>Natural language date/time relative to current time.</td></tr>
4040
<tr><td>payment_provider</td><td>String</td><td></td></tr>
4141
<tr><td>footer</td><td>Text</td><td></td></tr>
42-
<tr><td>verification_methods</td><td>String</td><td></td></tr>
42+
<tr><td>verification_methods</td><td>Array</td><td>Array of strings, see verification_method for values.</td></tr>
4343
<tr><td>reminder_sms</td><td>Boolean</td><td></td></tr>
4444
<tr><td>closed_for_holidays</td><td>Boolean</td><td></td></tr>
45-
<tr><td>new_user_text</td><td>Liquid-Text</td><td>Above booking form.</td></tr>
45+
<tr><td>reservation_form_text</td><td>Liquid-Text</td><td>Above booking form.</td></tr>
4646
<tr><td>new_booking_text</td><td>Liquid-Text</td><td>Booking confirmation page.</td></tr>
4747
<tr><td>booking_form</td><td>Liquid-Text</td><td>Custom booking form.</td></tr>
4848
<tr><td>person_form</td><td>Liquid-Text</td><td>For custom data in administration system.</td></tr>
@@ -114,8 +114,8 @@ Response
114114

115115
<table>
116116
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
117-
<tr><td>from</td><td>Date</td><td></td></tr>
118-
<tr><td>to</td><td>Date</td><td></td></tr>
117+
<tr><td>from</td><td>Date</td><td>Default: beginning of the current week.</td></tr>
118+
<tr><td>to</td><td>Date</td><td>Default: end of the week of from.</td></tr>
119119
</table>
120120

121121
## Users

‎_endpoints/bookings.md‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ description: API reference for the Makeplans bookings endpoint — attributes, s
2525
<tr><td>paid_at</td><td>Datetime</td><td>Only for output</td></tr>
2626
<tr><td>external_id</td><td>String</td><td>Not required</td></tr>
2727
<tr><td>paid_amount</td><td>Decimal</td><td>Only for output</td></tr>
28-
<tr><td>invoiced_at</td><td>Datetime</td><td>Only for output</td></tr>
28+
<tr><td>invoiced_at</td><td>Date</td><td>Only for output</td></tr>
2929
<tr><td>revision_count</td><td>Integer</td><td>Automatically set</td></tr>
30-
<tr><td>created_by</td><td>String</td><td>Automatically set</td></tr>
31-
<tr><td>updated_by</td><td>String</td><td>Automatically set</td></tr>
30+
<tr><td>created_by</td><td>Integer</td><td>Automatically set. User id.</td></tr>
31+
<tr><td>updated_by</td><td>Integer</td><td>Automatically set. User id.</td></tr>
3232
<tr><td>external_url</td><td>String</td><td>Not required</td></tr>
3333
<tr><td>external_host_url</td><td>String</td><td>Not required</td></tr>
3434
<tr><td>booked_by_person_id</td><td>Integer</td><td>Only for output. Person who made the booking (e.g. parent booking for child).</td></tr>
@@ -81,7 +81,7 @@ Bookings on a waitlist are set to `waitlisted`. A waitlisted booking is not acti
8181

8282
## Active bookings
8383

84-
Bookings with states `awaiting_verification`, `awaiting_payment`, `awaiting_confirmation` or `confirmed` are considered to be active. Bookings with state `awaiting_verification` will be updated with state `verification_expired` after the current time passes `expires_at`. However updating states rely on automatic tasks so you must use the `active` attribute to check whether a booking is active or not. Only active bookings will be returned unless you specify: a booking by id, a specific state such as bookings that are awaiting confirmation, to return all bookings for a resource or dates, or for a person.
84+
Bookings with states `awaiting_verification`, `awaiting_payment`, `awaiting_confirmation` or `confirmed` are considered to be active. Bookings with state `awaiting_verification` will be updated with state `verification_expired` after the current time passes `expires_at`. However updating states rely on automatic tasks so you must use the `active` attribute to check whether a booking is active or not. Only active bookings will be returned unless you request a booking by id, specify a specific state such as bookings that are awaiting confirmation, or use the `all` or `visible` listings.
8585

8686
## Listing
8787

@@ -97,11 +97,11 @@ See query parameters for filtering the output beyond the default outputs.
9797

9898
`GET /bookings/all` will return all bookings of all states (including `declined`, `cancelled`, `deleted`, and `verification_expired`). This is a useful output for synchronisation when you need to keep a track of deleted bookings.
9999

100-
`GET /bookings/visible` will return all active bookings as well as those declined or cancelled. This is the preferred output if you want to provide a list of all bookings for visual presentation.
100+
`GET /bookings/visible` will return all active bookings as well as those declined, cancelled or waitlisted. This is the preferred output if you want to provide a list of all bookings for visual presentation.
101101

102-
`GET /bookings/no_status` will return all active bookings with no status set.
102+
`GET /bookings/no_status` will return past confirmed bookings with a person where the status is not `completed` or `no_show`.
103103

104-
Response
104+
Abbreviated response. Responses include all attributes listed above, including the full `person` object and the related `resource`, `service` and `event` objects with id and title (use the `extended` parameter for their full data).
105105

106106
```json
107107
[
@@ -136,8 +136,8 @@ Response
136136
<tr><td>resource_id</td><td>Integer or array of integers</td><td></td></tr>
137137
<tr><td>person_id</td><td>Integer or array of integers</td><td></td></tr>
138138
<tr><td>external_id</td><td>String</td><td></td></tr>
139-
<tr><td>start</td><td>Datetime</td><td>booked_from after param. Also accepts the values now and today.</td></tr>
140-
<tr><td>end</td><td>Datetime</td><td>booked_to before param. Also accepts the values now and today.</td></tr>
139+
<tr><td>start</td><td>Datetime</td><td>booked_to after param. Combine with end to return all bookings that overlap the period. Also accepts the values now and today.</td></tr>
140+
<tr><td>end</td><td>Datetime</td><td>booked_from before param. Also accepts the values now and today.</td></tr>
141141
<tr><td>since</td><td>Datetime</td><td>updated_at after param. Also accepts the values now and today.</td></tr>
142142
<tr><td>collection_id</td><td>UUID</td><td></td></tr>
143143
<tr><td>state</td><td>String or array of strings</td><td>See states</td></tr>
@@ -231,8 +231,8 @@ The parameters for recurrence are not set in `booking` but in `recurring`.
231231
<table>
232232
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
233233
<tr><td>rrule</td><td>String</td><td>Repeating pattern. Example: `FREQ=DAILY;UNTIL=19971224T000000Z`.</td></tr>
234-
<tr><td>rdate</td><td>String</td><td>List of recurring dates. Example: `VALUE=DATE:19970101,19970120,19970217,19970421`.</td></tr>
235-
<tr><td>exdate</td><td>String</td><td>List of dates that should be excluded from the recurring rule. Example: `VALUE=DATE:19970102`.</td></tr>
234+
<tr><td>rdate</td><td>String</td><td>Comma separated list of recurring dates. Example: `19970101,19970120,19970217,19970421`.</td></tr>
235+
<tr><td>exdate</td><td>String</td><td>Comma separated list of dates that should be excluded from the recurring rule. Example: `19970102`.</td></tr>
236236
</table>
237237

238238
You should always specify COUNT or UNTIL with RRULE. The max number of occurrences is 731, regardless if a limit is set or not.

‎_endpoints/categories.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Response
3333
"custom_data": null,
3434
"id": 1,
3535
"parent_id": null,
36+
"priority_value": null,
3637
"title": "My first little category",
3738
"updated_at": "2012-09-20T15:34:16+02:00"
3839
}

‎_endpoints/coupons.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ description: API reference for the Makeplans coupons endpoint — attributes and
1111
<tr><td>id</td><td>Integer</td><td>Automatically set</td></tr>
1212
<tr><td>created_at</td><td>Datetime</td><td>Automatically set</td></tr>
1313
<tr><td>updated_at</td><td>Datetime</td><td>Automatically set</td></tr>
14-
<tr><td>title</td><td>String</td><td>Required</td></tr>
14+
<tr><td>title</td><td>String</td><td>Not required</td></tr>
1515
<tr><td>code</td><td>String</td><td>Required</td></tr>
16-
<tr><td>value_type</td><td>String</td><td>Values: percentage or amount.</td></tr>
17-
<tr><td>value</td><td>Integer</td><td>Required</td></tr>
16+
<tr><td>value_type</td><td>String</td><td>Required. Values: percentage or amount.</td></tr>
17+
<tr><td>value</td><td>Integer</td><td>Required. Maximum 100 when value_type is percentage.</td></tr>
1818
<tr><td>valid_from</td><td>Datetime</td><td></td></tr>
1919
<tr><td>valid_until</td><td>Datetime</td><td></td></tr>
2020
<tr><td>active</td><td>Boolean</td><td></td></tr>

‎_endpoints/message-templates.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ Message templates define the content of messages sent to customers for booking e
1313
<tr><td>id</td><td>Integer</td><td>Automatically set</td></tr>
1414
<tr><td>created_at</td><td>Datetime</td><td>Automatically set</td></tr>
1515
<tr><td>updated_at</td><td>Datetime</td><td>Automatically set</td></tr>
16-
<tr><td>message_type</td><td>String</td><td>Values: confirmation, reminder, follow_up. See message types.</td></tr>
17-
<tr><td>delivery_type</td><td>String</td><td>Values: email, sms.</td></tr>
18-
<tr><td>subject</td><td>String</td><td>Message subject line. Only applicable for email.</td></tr>
19-
<tr><td>template</td><td>Liquid-Text</td><td>Message body template.</td></tr>
20-
<tr><td>delivery_timing</td><td>String</td><td>When the message should be delivered. See delivery timing.</td></tr>
16+
<tr><td>message_type</td><td>String</td><td>Required. Values: confirmation, reminder, follow_up. See message types.</td></tr>
17+
<tr><td>delivery_type</td><td>String</td><td>Required. Values: email, sms.</td></tr>
18+
<tr><td>subject</td><td>String</td><td>Message subject line. Required for email, not applicable for sms.</td></tr>
19+
<tr><td>template</td><td>Liquid-Text</td><td>Required. Message body template.</td></tr>
20+
<tr><td>delivery_timing</td><td>String</td><td>When the message should be delivered. Required except for confirmation. See delivery timing.</td></tr>
2121
<tr><td>active</td><td>Boolean</td><td>Whether the template is active.</td></tr>
2222
<tr><td>services</td><td>Array</td><td>Service IDs this template applies to.</td></tr>
2323
<tr><td>settings</td><td>Object</td><td>Not required. Key/value. Stored as strings.</td></tr>

‎_endpoints/orders.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ The response includes nested `person` and `order_line_items`.
4242
<tr><td>quantity</td><td>Integer</td><td></td></tr>
4343
<tr><td>amount</td><td>Decimal</td><td>Unit price</td></tr>
4444
<tr><td>gift_card_id</td><td>Integer</td><td>Associated gift card if applicable</td></tr>
45+
<tr><td>pass_id</td><td>Integer</td><td>Associated pass if applicable</td></tr>
46+
<tr><td>subscription_id</td><td>Integer</td><td>Associated subscription if applicable</td></tr>
4547
<tr><td>booking_id</td><td>Integer</td><td>Associated booking if applicable</td></tr>
4648
</table>
4749

@@ -79,6 +81,8 @@ Response
7981
"quantity": 1,
8082
"amount": "1000.0",
8183
"gift_card_id": null,
84+
"pass_id": null,
85+
"subscription_id": null,
8286
"booking_id": null
8387
}
8488
]

‎_endpoints/people.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Response
7777

7878
### Query Parameters
7979

80-
You can search multiple columns at once, for example `email` and `phone_number`, or you can use the shorthand `search` to search email, phone number, national id no or name.
80+
You can search multiple columns at once, for example `email` and `phone_number` — people matching any of the specified columns are returned. Or you can use the shorthand `search` to search email, phone number, national id no or name.
8181

8282
<table>
8383
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
@@ -131,7 +131,7 @@ Please note that this token is perishable, meaning that it will be removed from
131131

132132
### Send perishable token
133133

134-
`POST /people/perishable_token/send` will send a SMS with a five digit code (the token) or an email with a link which includes the token in the URL. Specify either `email` or `phone_number`.
134+
`POST /people/perishable_token/send` will send a SMS with a six digit code (the token) or an email with a link which includes the token in the URL. Specify either `email` or `phone_number`.
135135

136136
### Verify perishable token
137137

‎_endpoints/resource-exception-dates.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ If a resource should be closed for a week then you would add resource exception
1111
If a resource should have opening hours 08:00 to 14:00 on January 5th 2016 instead of the default opening hours for that weekday which could be 09:00 to 15:00, then add it as a resource exception date.
1212
See [resource opening hours](/endpoints/resources/#default-opening-hours) for how to specify.
1313

14-
A `null` value will fallback to the default availability for the resource. An empty array means the resource is closed on the specified exception date.
14+
A `null` value or an empty array means the resource is closed on the specified exception date. To fall back to the default availability for the resource, delete the exception date.
1515

1616
Exception dates are related to a resource: `GET /resources/{resource_id}/exception_dates`.
1717

@@ -37,7 +37,7 @@ An exception date without `service_id` applies to the resource. All endpoints be
3737

3838
## Listing
3939

40-
`GET /resources/{resource_id}/exception_dates` will return all exception dates for resource with id `{resource_id}`.
40+
`GET /resources/{resource_id}/exception_dates` will return exception dates for resource with id `{resource_id}` within the specified period. Without `from` and `to` only the current week is returned.
4141

4242
Response
4343

@@ -49,6 +49,7 @@ Response
4949
"resource_id": 1,
5050
"exception_date": "2014-01-08",
5151
"opening_hours": ["08:00", "12:00", "12:30", "17:30"],
52+
"service_id": null,
5253
"updated_at": "2012-09-20T15:34:16+02:00"
5354
}
5455
}
@@ -59,8 +60,8 @@ Response
5960

6061
<table>
6162
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
62-
<tr><td>from</td><td>Date</td><td></td></tr>
63-
<tr><td>to</td><td>Date</td><td></td></tr>
63+
<tr><td>from</td><td>Date</td><td>Default: beginning of the current week.</td></tr>
64+
<tr><td>to</td><td>Date</td><td>Default: end of the current week.</td></tr>
6465
<tr><td>service_id</td><td>Integer</td><td>Return exception dates scoped to this service. When not set only resource exception dates are returned.</td></tr>
6566
</table>
6667

‎_endpoints/resources.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Response
6161
"resource": {
6262
"capacity": 1,
6363
"created_at": "2012-09-20T15:34:16+02:00",
64+
"custom_data": null,
6465
"id": 1,
6566
"opening_hours_mon": ["08:00", "16:00"],
6667
"opening_hours_tue": ["08:00", "11:00", "13:00", "17:30"],

‎_endpoints/services.md‎

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
---
22
title: Services
33
nav_order: 4
4-
description: API reference for the Makeplans services endpoint — the four service types and their attributes.
4+
description: API reference for the Makeplans services endpoint — service types and their attributes.
55
---
66

7-
There are four types of services:
7+
There are seven types of services:
88

99
* Appointment
1010
* Attendance
1111
* Product
1212
* Gift card
13+
* Addon
14+
* Subscription
15+
* Pass
1316

1417
Appointments can be booked within fixed opening hours as specified on the Resource and with exceptions specified in ResourceExceptionDate.
1518

@@ -34,7 +37,7 @@ Attendance at an event is also a booking but the individual booking datetime or
3437
<tr><td>same_day</td><td>Boolean</td><td>Not required (default false)</td></tr>
3538
<tr><td>template</td><td>String</td><td>Component template (calendar view)</td></tr>
3639
<tr><td>interval_rounding</td><td>Integer</td><td>Overrides account default (see info on account object)</td></tr>
37-
<tr><td>booking_type</td><td>String</td><td>Required. Values: appointment (default), attendance, product, gift_card</td></tr>
40+
<tr><td>booking_type</td><td>String</td><td>Required. Values: appointment (default), attendance, product, gift_card, addon, subscription, pass</td></tr>
3841
<tr><td>custom_data</td><td>Object</td><td>Not required. Key/value. Stored as strings.</td></tr>
3942
<tr><td>booking_form</td><td>Liquid-Text</td><td>Custom booking form</td></tr>
4043
<tr><td>mail_verification</td><td>Liquid-Text</td><td></td></tr>
@@ -58,13 +61,19 @@ Attendance at an event is also a booking but the individual booking datetime or
5861
<tr><td>priority_strategy</td><td>String</td><td>Not required. Strategy for resource priority assignment.</td></tr>
5962
<tr><td>availability_type</td><td>String</td><td>Not required. Values: resource (default), provider. With resource the opening hours on the resource are used. With provider the opening hours on the [provider](/endpoints/providers/) are used.</td></tr>
6063
<tr><td>priority_value</td><td>Integer</td><td>Not required. Priority value for ordering.</td></tr>
64+
<tr><td>quota</td><td>Integer</td><td>Number of uses. Required for subscription and pass unless `unlimited` is true. Not applicable for other types.</td></tr>
65+
<tr><td>unlimited</td><td>Boolean</td><td>Unlimited number of uses. Only applicable for subscription and pass. Default: false.</td></tr>
66+
<tr><td>billing_period</td><td>Integer</td><td>Required for subscription. Not applicable for other types.</td></tr>
67+
<tr><td>renewal_price</td><td>Decimal</td><td>Only applicable for subscription.</td></tr>
68+
<tr><td>validity_days</td><td>Integer</td><td>Number of days the pass is valid. Required for unlimited passes. Only applicable for pass.</td></tr>
69+
<tr><td>linked_service_ids</td><td>Array</td><td>Ids of linked services.</td></tr>
6170
</table>
6271

6372
### Deprecated attributes
6473

6574
<table>
6675
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
67-
<tr><td>booking_type_id</td><td>Integer</td><td>1: appointment. 2: attendance. 3: gift_card. 4: product.</td></tr>
76+
<tr><td>booking_type_id</td><td>Integer</td><td>1: appointment. 2: attendance. 3: gift_card. 4: product. 5: addon. 6: subscription. 7: pass.</td></tr>
6877
</table>
6978

7079
## Listing
@@ -75,10 +84,16 @@ Attendance at an event is also a booking but the individual booking datetime or
7584

7685
`GET /services/attendances` will return all services with booking_type=attendance.
7786

78-
`GET /services/products` will return all services with booking_type=product or booking_type=gift_card.
87+
`GET /services/products` will return all sellable services (booking_type product, gift_card, addon, subscription or pass).
7988

8089
`GET /services/gift_cards` will return all services with booking_type=gift_card.
8190

91+
`GET /services/addons` will return all services with booking_type=addon.
92+
93+
`GET /services/subscriptions` will return all services with booking_type=subscription.
94+
95+
`GET /services/passes` will return all services with booking_type=pass.
96+
8297
### Query Parameters
8398

8499
<table>

0 commit comments

Comments
 (0)