Replies: 24 comments 127 replies
-
Hi @ketriii! I'm Dosu and I’m helping the cal.com team. The 400 error is caused by the attendee's phone number not being in valid international format. The API expects the phone number to look like Here's a checklist to help you get a successful booking request:
Example payload: {
"start": "2024-08-13T09:00:00Z",
"eventTypeId": 123456,
"attendee": {
"name": "John Doe",
"email": "[email protected]",
"phoneNumber": "+14155552671",
"timeZone": "America/New_York"
}
} Example cURL: curl -X POST "https://api.cal.com/v2/bookings" \
-H "Content-Type: application/json" \
-H "cal-api-version: 2024-08-13" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"start": "2024-08-13T09:00:00Z",
"eventTypeId": 123456,
"attendee": {
"name": "John Doe",
"email": "[email protected]",
"phoneNumber": "+14155552671",
"timeZone": "America/New_York"
}
}' If you still get an error, double-check the error message for which field is failing validation. If you share the full error response, I can help you debug further. To reply, just mention @dosu. How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other |
Beta Was this translation helpful? Give feedback.
-
@dosu |
Beta Was this translation helpful? Give feedback.
-
@dosu For cal.com event advance setting for Check for conflicts. whats the difference between the options of using event type and user setting. ![]() |
Beta Was this translation helpful? Give feedback.
-
@dosu why is this router node in n8n keep taking the wrong path |
Beta Was this translation helpful? Give feedback.
-
@dosu In order to get the bookingUid for a specific booked appointment to be able to reschedule. what api request in the cal.com docs can I use to retrieve it before using the reschedule booking request? |
Beta Was this translation helpful? Give feedback.
-
![]() |
Beta Was this translation helpful? Give feedback.
-
@dosu In the screenshot is this for or retrieving the bookingUid? But if I'm rescheduling for a specific appoitnment how will I dynamically insert the bookinguid for the currentappt the user wants to book |
Beta Was this translation helpful? Give feedback.
-
@dosu lets focus on this first. According to what I can't filter booking by phone number? That don't seem to make sense. Also To only filter by event type and name of attendee can be problematic if there are 2 attendees with same name results in two outputted slots. Is email really the only unique filter offered seriously? Even though I collect phone number in the booking process on cal.com for attendees. |
Beta Was this translation helpful? Give feedback.
-
@dosu Ok if I can filter by the specific date. What will the url need to be written as an example. Such as when you showed how to filter with email with the following url example -"https://api.cal.com/v2/[email protected]". So How will my url will have to be formatted using the date and eventypeid. Also wouldn't the specific date filter be a unique filter like phone number. Also what does the format of the date/time have to be in the url if I were to dynamically input it? because I current have the date format in my workflow as UTC example - "2025-08-18T20:00:00.000Z" as the start time for the attendee |
Beta Was this translation helpful? Give feedback.
-
@dosu I'm confused what you said if the filter is by date/time how could multiple booking show up for the same time in 1 specific eventType. Also for the query parameters specifically afterStart and beforeEnd. You said I can include either or in the url but I just want to confirm afterStart parameter in terms of time it will be the starting time of the appt for example the appt is booked for 1 hour at 4pm on monday august 18th which in UTC format will be "2025-08-18T20:00:00.000Z". Will that proper to use to be able to retrieve the specific booking without the beforeEnd parameter? |
Beta Was this translation helpful? Give feedback.
-
@dosu Ok I got it to output the specific appointment with the UID. How should i continue my workflow now? with a next http node using the UID from the prev node to use the Reschedule a booking post request? |
Beta Was this translation helpful? Give feedback.
-
@dosu if i just want to use the start time in the json body will the coding look. Do I include the email and rescheduling reason properties but leave their values blank or do I just omit them entirely and just have the start. Code it for me see I see an example |
Beta Was this translation helpful? Give feedback.
-
@dosu Why did I get this error in the http node when trying to reschedule when I have all my necessary headers as you see in attachments screenshots. THis was the error Forbidden - perhaps check your credentials? ![]() ![]() |
Beta Was this translation helpful? Give feedback.
-
![]() ![]() ![]() ![]() @dosu Check screenshot in my event type setting i have Allow rescheduling past events switched off could that be the reason? Also check other screenshots for the settings i have my event type set too for conflicts. Could it be because I have Reason for reschedule switched on making it required technically if it was from the link booking? Tell me is there anything possibly conflicting from settings based on all the screenshots dealing with reschedule |
Beta Was this translation helpful? Give feedback.
-
![]() ![]() ![]() ![]() @dosu Based on the screenshots of my workflow and nodes. DO I have it set up correctly. The http node labeled GetBookingUID2 is specifically using the rescheduledToUid to retrieve the booking data then it goes down another if node checking if rescheduledToUid and if it is the IF node will reroute back to that same node until it doesn't exist and then will take the false path to the "Reschedule booking2" http node that will use the present UID that came in the input. Can you just verify if I did it correctly |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
@dosu why is this saying this when I try to cancel the appt. Wtf it means cancelation reason is required according to what the API docs?? |
Beta Was this translation helpful? Give feedback.
-
@dosu Explain what I should put in this part of the settings ![]() |
Beta Was this translation helpful? Give feedback.
-
@dosu Isn’t the predefined variable by vapi only for the actual number the
user is calling from?
…On Wed, Aug 20, 2025 at 7:41 PM dosubot[bot] ***@***.***> wrote:
Vapi automatically captures the caller’s phone number on inbound calls and
exposes it as the dynamic variable {{customer.number}} (in E.164 format,
e.g., +1234567890). You can reference {{customer.number}} anywhere in
your system prompt, tool logic, or API payloads—no need to ask the user for
their number unless you want to confirm or update it.
Best practice is to update your prompt so the agent says something like:
“Is the number you’re calling from ({{customer.number}}) the best number
to reach you, or would you like to use a different one?”
If the caller says yes, map {{customer.number}} to your internal
phone_number parameter. If they provide a different number, validate and
store that instead (using your existing formatting/validation rules). Only
prompt for a number if the caller wants to use a different one or if
{{customer.number}} is missing/invalid.
For scheduling, rescheduling, or cancellation, always use the value in
your phone_number parameter (which will be either {{customer.number}} or
the user-provided number) in your downstream API calls. This keeps your
workflow frictionless and ensures you always have a valid number for
Cal.com or other integrations.
You can use {{customer.number}} directly in your prompts, confirmations,
or API payloads—no extra setup is needed in Vapi; just reference it in
double curly braces wherever you need the caller’s number.
See Vapi dynamic variables docs
<https://docs.vapi.ai/assistants/dynamic-variables>
*To reply, just mention @dosu <https://go.dosu.dev/dosubot>.*
------------------------------
How did I do? Good
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=great_response>
| Irrelevant
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=irrelevant_answer>
| Incorrect
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=incorrect_sources>
| Verbose
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=too_verbose>
| Hallucination
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=hallucination>
| Report 🐛
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=bug_report>
| Other
<https://app.dosu.dev/response-feedback/95ca8527-c634-495e-9d88-fbaaeac8abc4?feedback_type=other>
[image: Chat with Dosu]
<https://app.dosu.dev/af5cfe6f-229f-4840-8b4e-da82d0bb1ac6/ask?utm_source=github>
[image: Join Discord] <https://go.dosu.dev/discord-bot> [image: Share on
X]
<https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/calcom/cal.com/discussions/23134>
—
Reply to this email directly, view it on GitHub
<#23134 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BWDGDAKZNWCYDSMZJVLHMB33OUBQ3AVCNFSM6AAAAACEB2T35GVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTIMJXGEZDKOI>
.
You are receiving this because you were mentioned.Message ID: <calcom/cal.
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Shouldn’t this predefined variable go in my parameters in the schedule tool
just like my custom made “phone_number” parameter for the user given phone
number on the call
…On Wed, Aug 20, 2025 at 7:49 PM dosubot[bot] ***@***.***> wrote:
Yes, the predefined variable {{customer.number}} in Vapi always captures
the phone number the user is calling from (the caller ID), in E.164 format.
It does not automatically capture any other number—if the caller wants to
use a different number, you need to prompt for it and store that separately
(for example, in your own phone_number parameter).
Best practice is to use {{customer.number}} as the default, confirm with
the caller if they want to use it, and only ask for a different number if
needed. If the caller provides a new number, validate and use that instead.
You never need to collect both at the same time—just use whichever is
confirmed as the preferred contact. If the caller’s number is blocked or
unavailable, prompt for it as usual.
You can reference {{customer.number}} directly in your prompts, system
messages, or API payloads—no extra setup is needed.
See Vapi docs for details
<https://docs.vapi.ai/assistants/dynamic-variables>.
*To reply, just mention @dosu <https://go.dosu.dev/dosubot>.*
------------------------------
How did I do? Good
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=great_response>
| Irrelevant
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=irrelevant_answer>
| Incorrect
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=incorrect_sources>
| Verbose
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=too_verbose>
| Hallucination
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=hallucination>
| Report 🐛
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=bug_report>
| Other
<https://app.dosu.dev/response-feedback/4e25e6a8-bef3-425f-ad5a-b8544bc0da2e?feedback_type=other>
[image: Chat with Dosu]
<https://app.dosu.dev/af5cfe6f-229f-4840-8b4e-da82d0bb1ac6/ask?utm_source=github>
[image: Join Discord] <https://go.dosu.dev/discord-bot> [image: Share on
X]
<https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/calcom/cal.com/discussions/23134>
—
Reply to this email directly, view it on GitHub
<#23134 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BWDGDAJLAHD3EJN7PYHPXML3OUCPNAVCNFSM6AAAAACEB2T35GVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTIMJXGEZTCMQ>
.
You are receiving this because you were mentioned.Message ID: <calcom/cal.
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
@dosu are you saying I can map the predefined variable to my phone_number
parameter because when the user schedule an appointment that parameter
comes as a variable in my webhook payload if that’s what it’s called
…On Wed, Aug 20, 2025 at 7:54 PM dosubot[bot] ***@***.***> wrote:
You don’t need to add the predefined variable {{customer.number}} as a
separate parameter in your schedule tool. Vapi automatically captures the
caller’s number as {{customer.number}} (the number they’re calling from,
in E.164 format). The best practice is to use {{customer.number}} as the
default for your internal phone_number parameter, confirm with the caller
if they want to use it, and only prompt for a different number if needed.
If they provide a different number, validate and store that instead—never
collect both at the same time.
In your workflow, always use the value in your phone_number parameter
(which will be either {{customer.number}} or the user-provided number)
for downstream API calls like scheduling, rescheduling, or cancellation.
You can reference {{customer.number}} directly in prompts, messages, or
API payloads—no extra setup is needed in the schedule tool itself. If the
caller’s number is blocked or unavailable, prompt for it as usual.
See Vapi docs for details
<https://docs.vapi.ai/assistants/dynamic-variables>
*To reply, just mention @dosu <https://go.dosu.dev/dosubot>.*
------------------------------
How did I do? Good
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=great_response>
| Irrelevant
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=irrelevant_answer>
| Incorrect
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=incorrect_sources>
| Verbose
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=too_verbose>
| Hallucination
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=hallucination>
| Report 🐛
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=bug_report>
| Other
<https://app.dosu.dev/response-feedback/138340fd-2dec-4584-98b1-3ff0ce7dbe10?feedback_type=other>
[image: Chat with Dosu]
<https://app.dosu.dev/af5cfe6f-229f-4840-8b4e-da82d0bb1ac6/ask?utm_source=github>
[image: Join Discord] <https://go.dosu.dev/discord-bot> [image: Share on
X]
<https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/calcom/cal.com/discussions/23134>
—
Reply to this email directly, view it on GitHub
<#23134 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BWDGDAP3SITKNQ5JXLRQC6D3OUDCXAVCNFSM6AAAAACEB2T35GVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTIMJXGEZTGMQ>
.
You are receiving this because you were mentioned.Message ID: <calcom/cal.
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
@dosu my eventType has always been set to multiple duration options. 15 min
30min 45 min and 1 hour. Why did it change in this to 15 min? Are you
saying because the booking ID wasn’t present. The screenshot I sent you was
from the get bookinguid node impart sure you would need the event type id
in order to get the uid or i may be wrong. But I’ll try again since now I
fix the payload where the event type will come in the payload and
dynamically insert in the url. But are you say the reschedule http request
cant reschedule any other duration but 15min? It should be based on the
specific booking
…On Wed, Aug 20, 2025 at 11:54 PM dosubot[bot] ***@***.***> wrote:
The reason your appointment changed from 1 hour to 15 minutes after
rescheduling is that the Cal.com reschedule API only accepts a new start
time—it does not let you specify duration or eventTypeId in the request
body. When you reschedule, the backend uses the bookingUid to look up the
original booking and its event type. If the event type’s default duration
is now 15 minutes (or if the system can’t determine the original duration),
the new booking will use that default slot length—even if the original was
1 hour. This can happen if the event type’s configuration changed, or if
the backend falls back to the event type’s current default duration for any
reason (see API schema
<https://github.com/calcom/cal.com/blob/b9aee3b18c6bf9c5d55f61ca3581f1b9dec0b651/packages/platform/types/bookings/2024-08-13/inputs/reschedule-booking.input.ts>,
backend logic
<https://github.com/calcom/cal.com/blob/b9aee3b18c6bf9c5d55f61ca3581f1b9dec0b651/apps/api/v2/src/ee/bookings/2024-08-13/services/bookings.service.ts>
).
You didn’t get an error with eventTypeId as undefined because the backend
infers the event type from the bookingUid, so eventTypeId is not required
in the reschedule request. But if the event type’s slot length is 15
minutes, that’s what the rescheduled booking will use.
To ensure the correct duration in future reschedules, check your event
type’s default slot length in Cal.com. If you want to preserve the original
duration, avoid changing the event type’s slot length after bookings are
made, or consider recreating the booking if you need a different duration.
There’s currently no way to override duration directly in the reschedule
API call.
*To reply, just mention @dosu <https://go.dosu.dev/dosubot>.*
------------------------------
How did I do? Good
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=great_response>
| Irrelevant
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=irrelevant_answer>
| Incorrect
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=incorrect_sources>
| Verbose
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=too_verbose>
| Hallucination
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=hallucination>
| Report 🐛
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=bug_report>
| Other
<https://app.dosu.dev/response-feedback/6d5a3faf-6948-4e09-abb7-2bad48008591?feedback_type=other>
[image: Chat with Dosu]
<https://app.dosu.dev/af5cfe6f-229f-4840-8b4e-da82d0bb1ac6/ask?utm_source=github>
[image: Join Discord] <https://go.dosu.dev/discord-bot> [image: Share on
X]
<https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/calcom/cal.com/discussions/23134>
—
Reply to this email directly, view it on GitHub
<#23134 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BWDGDAIRMJADL4QYADUDMVL3OU7H7AVCNFSM6AAAAACEB2T35GVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTIMJXGI3DANY>
.
You are receiving this because you were mentioned.Message ID: <calcom/cal.
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
hi @ketriii have all your issues been resolved? if not then how can I help you? |
Beta Was this translation helpful? Give feedback.
-
No I’m wondering when this reschedule api will be fixed to be more
practical. It’s unable to use the correct duration of the event being
rescheduled
…On Fri, Sep 5, 2025 at 2:19 AM Rajiv Sahal ***@***.***> wrote:
hi @ketriii <https://github.com/ketriii> have all your issues been
resolved? if not then how can I help you?
—
Reply to this email directly, view it on GitHub
<#23134 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BWDGDAM4RZXDD4ARQJYWYTL3RETQ3AVCNFSM6AAAAACEB2T35GVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTIMZRGQ2TQMQ>
.
You are receiving this because you were mentioned.Message ID: <calcom/cal.
***@***.***>
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I been trying for 2 days now to create a booking on Cal.com with the HTTP request but I can never get it to work I keep running into some type of error even with the help of AI. I'm really stuck and don't know what to do at this point. Here are related screenshots



Beta Was this translation helpful? Give feedback.
All reactions