Skip to main content

If I go here:

 

https://developer.calendly.com/api-docs/6rb6dtdln74sy-list-groups

 

It says:

Query Parameters

organization, string, required, Return groups that are associated with the organization associated with this URI”

 

The words “query parameters” normally mean a parameter that is in the URL, after a question mark, therefore I try:

 

curl -vvv  --request GET --url "https://api.calendly.com/groups?organization=DCF*******7OLC" --header 'Authorization: Bearer {hidden}' --header 'Content-Type: application/json'

 

But I get a 400 error. Since I’m using the -vvv flag, the full response is: 

 

Note: Unnecessary use of -X or --request, GET is already inferred.

*   Trying 172.64.146.81:443...

* Connected to api.calendly.com (172.64.146.81) port 443 (#0)

* ALPN, offering h2

* ALPN, offering http/1.1

* successfully set certificate verify locations:

*  CAfile: /etc/ssl/cert.pem

*  CApath: none

* (304) (OUT), TLS handshake, Client hello (1):

* (304) (IN), TLS handshake, Server hello (2):

* (304) (IN), TLS handshake, Unknown (8):

* (304) (IN), TLS handshake, Certificate (11):

* (304) (IN), TLS handshake, CERT verify (15):

* (304) (IN), TLS handshake, Finished (20):

* (304) (OUT), TLS handshake, Finished (20):

* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256

* ALPN, server accepted to use h2

* Server certificate:

*  subject: CN=calendly.com

*  start date: May 20 15:43:59 2025 GMT

*  expire date: Aug 18 15:43:58 2025 GMT

*  subjectAltName: host "api.calendly.com" matched cert's "*.calendly.com"

*  issuer: C=US; O=Let's Encrypt; CN=E6

*  SSL certificate verify ok.

* Using HTTP2, server supports multiplexing

* Connection state changed (HTTP/2 confirmed)

* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0

* Using Stream ID: 1 (easy handle 0x155811400)

> GET /groups?organization=DCFERKOGVQYL7OLC HTTP/2

> Host: api.calendly.com

> user-agent: curl/7.79.1

> accept: */*

> content-type: application/json

>

< HTTP/2 400

< date: Sat, 14 Jun 2025 20:29:21 GMT

< content-type: application/json; charset=utf-8

< access-control-allow-origin: *

< access-control-expose-headers: ETag

< access-control-allow-methods: GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD

< access-control-allow-headers: *,x-requested-with,Content-Type,Accept,If-Modified-Since,If-None-Match,X-Token,Authorization

< access-control-max-age: 86400

< cache-control: no-cache

< x-request-id: d6a512ef-3a5a-4dbd-9996-1cab5fb4dede

< x-runtime: 0.042082

< strict-transport-security: max-age=31536000; includeSubDomains; preload

< x-envoy-upstream-service-time: 44

< x-ratelimit-remaining: 499

< x-ratelimit-reset: 60

< x-ratelimit-limit: 500

< vary: Accept-Encoding

< cf-cache-status: DYNAMIC

< set-cookie: __cf_bm=NXVYilKA5Ywi6kmjbXC6Dvy9jhtzsAVM0iqsmmH5PXE-1749932961-1.0.1.1-bZIqYnzzyOmxG.oecIir3skDToQ7AO09MkREdRmS.k.XavGQ9siwGtJZIOdW2g7DtUZUKD8GkV_oogXy3SFtJCnQuavVBzpzdLELjjt5VqU; path=/; expires=Sat, 14-Jun-25 20:59:21 GMT; domain=.calendly.com; HttpOnly; Secure; SameSite=None

< x-content-type-options: nosniff

< set-cookie: _cfuvid=cyaFygBhTF1fUU5zkCNubd1CuN1h2REJ0Nt9q.YnxjU-1749932961069-0.0.1.1-604800000; path=/; domain=.calendly.com; HttpOnly; Secure; SameSite=None

< server: cloudflare

< cf-ray: 94fc944e29d47c8e-EWR

<

* Connection #0 to host api.calendly.com left intact

 

The final message is: 

 

{"details":i{"message":"invalid","parameter":"organization"}],"message":"The supplied parameters are invalid.","title":"Invalid Argument"}%      

 

How can the parameter “organization” be invalid if it is required? Is it supposed to go in the body of the JSON? If it is in the body, then it is not a “query parameter”, it is simply a “parameter.”

The organization query parameter requires the full URI, in your example it would be:

?organization=https://api.calendly.com/organizations/DCF*******7OLC


I’ve encountered a similar issue before. Sometimes the error comes from the parameter not being passed correctly in the request, even if it looks like it’s there. Double-check the exact spelling and casing of “organization” in your code or API call, and make sure it matches what the server expects. Also, review if any additional formatting or data type is required. Sometimes a small mismatch can cause this 400 invalid parameter error. I solved this issue on my project based on soccer games. Hope this helps!


Reply