Fetchply Docs
Integrations and channels

Configure Functions

Let a Fetchply agent call a public API or connect to a remote MCP server for live tools and data.

Functions are live tools the agent can use during chat. You can connect a public GET, POST, PUT, PATCH, or DELETE endpoint, choose a ready-made integration, or add a remote MCP server. Every plan includes some: Free supports 2, Starter 3, Pro 6, and Business 10. A ready-made integration or MCP server counts as one function even when it adds several tools.

Ready-made integrations

When you add a function you can start from a ready-made integration instead of building one field by field. Pick a card, paste your credentials, fill in the one or two account details it asks for, and the tool is ready:

  • Zendesk — Create support ticket: when the agent can't resolve an issue, it collects the visitor's name, email, a subject, and the details, then files a Zendesk ticket. Your team follows up by email. You'll need your Zendesk subdomain (the first part of https://<subdomain>.zendesk.com) and an API token, entered as [email protected]/token:YOUR_API_TOKEN.
  • Freshdesk — Create support ticket: the same flow for Freshdesk. You'll need your Freshdesk subdomain and your API key, entered as YOUR_API_KEY:X (the letter X stands in for the unused password).
  • Stripe billing: the agent answers "is my subscription active", "when do I renew", and "did my payment go through" from your Stripe account. The visitor gives their billing email; the agent looks up the account and reports subscription status, the renewal date, and the latest invoice's payment status and amount due — never names, addresses, or payment details. When the visitor wants to make a change — cancel, switch plans, update their card, or pay an open invoice — the agent sends them to your Stripe customer portal sign-in page, where Stripe emails them a secure sign-in link before letting them in. You'll need two things from Stripe: a restricted API key (Stripe Dashboard → Developers → API keys → Create restricted key) with read access to Customers, Subscriptions, and Invoices only, and your customer portal login link (Settings → Billing → Customer portal → activate the login link).
  • Cal.com scheduling and Calendly scheduling: let the agent offer open time slots and book meetings.

New tickets are created as open with low priority; your team re-prioritizes them in the helpdesk. To protect your customers' privacy, the agent can create tickets but cannot read existing ones, so ticket follow-ups happen over email rather than in the chat.

Because Stripe billing answers are looked up by the email a visitor claims, anyone who knows a billing email can ask about that account. Only enable it if subscription status and invoice amounts are acceptable to share on that basis; the tools never reveal anything more. Account changes are safer: they always go through your Stripe customer portal, which verifies the visitor owns the email before any change can be made.

Connect an MCP server

Choose Add Function → Connect an MCP server when another service gives you a remote MCP server URL. Enter a short name and the complete public HTTPS URL. If the server gave you an API token, turn on Bearer token and paste it before connecting.

Fetchply connects to the server, reads the tools it provides, and makes those tools available to the agent. The server and all of its imported tools consume one Function from the agent's existing allowance. You do not need to add each tool separately.

This first version supports remote Streamable HTTP MCP servers with no authentication or a bearer token. It does not run local command-based or stdio servers. OAuth sign-in is not available yet, so a server that only offers browser authorization cannot be connected until OAuth support is added. If the service also offers a bearer token, use that token for now.

After connecting, the server card shows how many tools were found. Use Refresh tools when the server owner adds, removes, or changes tools. Pausing the card temporarily prevents the agent from using every tool from that server without removing the setup.

Connect only MCP servers you trust. Every imported tool becomes available to the agent, including tools that may create or change data in the connected service.

MCP troubleshooting

  • The server does not connect: confirm that the address is the actual MCP endpoint rather than the provider's home page or documentation page. It must use public HTTPS on the standard port.
  • The server reports unauthorized: turn on Bearer token and paste a current token. If the service requires browser sign-in and does not provide a token, it is not supported yet.
  • No tools are found: check that the endpoint is a Streamable HTTP MCP server and that the token can list its tools.
  • A tool was changed on the server: choose Refresh tools on the saved server card. Fetchply keeps using the last imported tool definitions until refresh succeeds.
  • Refresh fails after a token was replaced: remove the server and connect it again with the new token.

Build a custom Function with AI

Choose Describe your API to AI, select GET, POST, PUT, PATCH, or DELETE from the method dropdown, then continue. Fetchply starts a short conversation with the useful details already listed, so you can describe the API in ordinary language instead of filling every field yourself.

Include the public HTTPS endpoint, what the Function should do, what information it needs from the visitor, and the authentication type. A pasted cURL example or a short excerpt from the API documentation can help. If you have one, include a sample response so Fetchply can prepare a smaller, clearer answer for the agent.

While you chat, a panel beside the conversation lists the five parts every Function needs — Basics, Visitor inputs, Request, Authentication, and Response — and what is still missing from each. Fetchply asks one follow-up question when an essential detail is missing. Once the draft is ready the panel fills in with what it worked out, and you choose Review and continue. Every generated field remains editable, and nothing is saved or called until you review it.

Do not paste a real API key, password, or token into the AI conversation. Choose the authentication type there, then enter the credential in the secure authentication field on the review form. Fetchply intentionally leaves credential values blank.

AI setup troubleshooting

  • Fetchply asks for the endpoint again: include the exact public HTTPS address for the selected request method. A general documentation home page is not enough on its own.
  • The draft is missing a request field: describe the field's exact API name and whether the visitor must provide it, then send another message.
  • The response is left as Full response: paste a safe sample response and explain which values the agent should use. Without exact response fields, Fetchply avoids guessing paths.
  • AI setup is temporarily unavailable: your message stays in the box. Try again, or choose Set up manually instead and continue with the regular form.
  • You want to start the description again: choose Change type to select the HTTP method again, which clears the conversation and starts fresh.

Troubleshooting ready-made integrations

  • The test returns 401: the credentials are wrong, revoked, or entered in the wrong format. For Zendesk, check that the entry includes /token after your email and that token access is enabled in Admin Center → Apps and integrations → APIs. For Freshdesk, check that the entry ends with :X.
  • Stripe returns 403: your restricted key is missing a permission. Edit the key in the Stripe Dashboard and grant Read access to Customers, Subscriptions, and Invoices.
  • Stripe finds no account for an email that exists: the match is exact, including capitalization. The agent automatically retries in lowercase; if the email is stored in Stripe with unusual capitalization, ask the customer for the exact address on their receipt. When one email has several billing accounts, the newest one is used.
  • The Stripe portal link doesn't work for visitors: the customer portal login link must be activated in Stripe under Settings → Billing → Customer portal. If you deactivate or regenerate it there, edit the Stripe functions and paste the new link.
  • The test can't reach the address: double-check the subdomain. Enter only the first part of your helpdesk address (for https://acme.zendesk.com, enter acme), not the full URL.
  • A ticket didn't appear: run the built-in test from the function's edit screen, then check Activity for the exact error returned by your helpdesk.

The custom API Function editor

Adding or editing a Function opens a panel beside your list. Everything is on one page, grouped into five sections, with a list on the left you can use to jump straight to any of them: Basics, Visitor inputs, Request, Authentication, and Response. Save changes stays at the top of the panel, so it is always within reach however far you scroll.

Inside Request, the What gets sent tab shows the exact request that will leave Fetchply — the address, every header, and each value your agent will fill in. Your API key or token always appears as dots there, never as the real value. The Headers tab shows how many headers you have set, and Timeout controls how long Fetchply waits for a reply.

To avoid losing a half-finished Function, the panel does not close when you click the page behind it. Use Cancel, the close button, or the Esc key.

If a save is blocked, the panel tells you how many fields need attention, marks each affected section in the list with a count, and takes you to the first one.

Fill in the basics

Open Integrations → Functions, then Add Function. Build with AI or choose the manual setup. Add a clear name, description, and When to call it guidance so the agent knows when the endpoint is appropriate.

Configure the request

Choose GET, POST, PUT, PATCH, or DELETE from the method dropdown and enter a public HTTPS URL on port 443. GET sends parameters in the query string. Every other method sends parameters as a JSON body.

If your API expects a value inside the address itself — for example /orders/12345 — write the address with a placeholder: https://api.example.com/orders/{{param:order_id}}. At call time the placeholder is replaced with the visitor's value for the parameter of the same name. A parameter used this way must exist in your parameters list and be marked required; its value is inserted safely, so it can never change which site or page the request goes to. Placeholders work in the path and in query values, but not in the domain.

Add visitor inputs and authentication

Under Visitor inputs, add a text, number, or true/false value for each thing your agent should collect before it calls. Under Authentication, use no auth, a bearer token, Basic auth (entered as username:password), or a named API-key header. Stored secrets are encrypted and are not shown again.

Shape the response

Send the full response to the agent or map fields into a response template. Keep the returned data small and safe for a visitor-facing answer.

Test and monitor

Run the built-in test, save, then trigger the Function in chat. Each Function appears in your list as a card showing whether it reads or sends data, whether it is active or paused, and the inputs it collects. Review Activity for calls and failures. Testing POST, PUT, PATCH, or DELETE sends a real request that may change or delete data, so use values that are safe to keep.

Private IPs, localhost, non-HTTPS URLs, redirects, and non-443 ports are rejected. Responses are capped at 32 KB, and the timeout you set must be between 10 and 30 seconds. Functions already saved with a shorter timeout keep working; the next time you edit one, raise it to at least 10 seconds before saving.

A function failure returns a structured result so the agent can respond without blindly replaying a request that changes data. Design POST, PUT, PATCH, and DELETE endpoints to handle accidental repeated requests safely anyway.

If chat replies mention that a required value for the request was missing, the function's address contains a placeholder like {{param:order_id}} and the agent called it without that value. The agent asks the visitor for it and tries again on its own; if it keeps happening, make the parameter's description clearly state what to collect from the visitor.

The meter beside Add Function shows how many Functions you have used and how many are left, and turns amber on your last one. When none are left, Add Function is unavailable until you remove one or upgrade.

If saving shows a message that your plan allows a set number of functions, you have used the allowance for that agent. Delete a function you no longer need, or upgrade for a larger allowance. Allowances are counted per agent, so another agent on the same account has its own. If you move to a plan with a smaller allowance, functions you already saved keep working; you just cannot add new ones until you are back under the limit.