Move from another tool
Keep your scripts when you move to Cook (compatible APIs)
Cook answers the APIs of the tools it replaces. Point a script, a Zapier code step or a vendor SDK at Cook's address, give it a Cook key, and it keeps working.
When you move a tool’s work into Cook, the scripts, automations and SDK code you wrote against that tool don’t have to be rewritten. Cook answers the same API at its own address. You change two things: the address the script calls, and the key it sends.
| Tool | Its address | Cook’s address | Page |
|---|---|---|---|
| Calendly | https://api.calendly.com | https://api.trycook.ai/compat/calendly | Calendly |
| Typeform | https://api.typeform.com | https://api.trycook.ai/compat/typeform | Typeform |
| GoHighLevel | https://services.leadconnectorhq.com | https://api.trycook.ai/compat/ghl | GoHighLevel |
Everything after the address stays as the tool documents it: the paths, the query parameters, the request and response bodies, the page tokens, the error bodies and the webhook payloads.
The key
Make a key in Cook under Settings → API keys. It starts with ck_live_.
Send it wherever the tool’s own key went; Cook reads it from any of these:
Authorization: Bearer ck_live_…(what Calendly’s and GoHighLevel’s docs and Typeform’s SDK send)Authorization: ck_live_…X-Api-Key: ck_live_…- an
api_keyoraccess_tokenquery parameter
The key decides the workspace. Everything the script reads or writes is in the workspace the key was made in, and the key’s permissions apply: a key that may only read leads can’t book or delete anything through these APIs either.
What you get back
- Ids. Records you imported keep the ids they had in the other tool, so an id your script saved still finds the same record. Records made in Cook get an id in the other tool’s format the first time an API returns them, and keep it.
- Links that carry an address. Where the tool puts its own address inside
a response (Calendly’s
uri, Typeform’sself.href), Cook putshttps://api.trycook.ai/compat/<tool>there. Cook also accepts the other tool’s address in anything you send it, so a savedhttps://api.calendly.com/users/…still works as a filter. - Errors come back in the tool’s own error body and status codes, so the tool’s SDK raises the same errors it always did.
- Limits. Each key may make 300 calls a minute, with bursts up to 600. Past
that the answer is
429with aRetry-Afterheader, plus the rate-limit headers the tool itself sends.
Webhooks
Webhooks you register through these APIs are sent the way the tool sends them: the same event names, the same payloads, signed with the tool’s scheme and the secret you gave, and retried on the tool’s schedule. They fire for every change in Cook, whatever made it: a booking on a Cook booking page, a form filled on your site, or a change made in Cook itself.
Using it from an AI agent (Cook MCP)
What a script makes through these APIs is Cook’s own data, so an AI agent on Cook’s MCP reaches it with Cook’s tools. It needs no import and no token from the other tool.
| Made through | In Cook it is | The Cook MCP tool |
|---|---|---|
Typeform’s API (/compat/typeform) | A Cook form, and each response is a lead | form_list and form_get for the form, lead_list for its responses |
Calendly’s API (/compat/calendly) | A Cook meeting on a Cook booking page | meeting_list |
POST /invitee_no_shows | The meeting’s No-show outcome | meeting_mark_no_show (and meeting_unmark_no_show for DELETE /invitee_no_shows/{uuid}) |
An invitee’s reschedule_url | The booking’s own manage link | rebookUrl on each meeting in meeting_list |
GoHighLevel’s API (/compat/ghl) contacts | Cook leads | lead_list |
| GoHighLevel’s API opportunities | A lead’s place in a pipeline: pipeline, stage, value, status | pipeline_view to read, lead_set_opportunity to create or move one |
The ghl_* tools are for a GoHighLevel account the workspace has connected,
not for contacts and opportunities made through /compat/ghl. import_start is only for an account on the other tool itself, and asks for
that tool’s token. Whether a text or an email to a lead goes out at once or
waits for a person to approve it is decided by the workspace’s approval rules
(approval_rules).