If I go here:
https://developer.calendly.com/api-docs/6rb6dtdln74sy-list-groups
It says:
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.”