> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automate.ax/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Automate.ax automations are TypeScript programs.
> Use Bun for installation and command examples.
> Use Automate.ax for the product name and automate.ax for the package, CLI, and domain.
> Treat documented public APIs as current; do not invent transitional or deprecated names.

# Custom integrations

> Call unsupported services and handle their credentials safely.

Automate.ax does not currently support user-defined, platform-managed integrations. Managed integrations depend on privileged server components for credential storage, authorization, account binding, and token refresh, so an automation cannot define one entirely in its own code.

## Use a custom action

Call an unsupported service from a custom action built with `defineAction`. The action handler can use `fetch`, validate the provider response, and return typed data to the rest of the automation.

Follow [Call an external API with a custom action](/guides/call-an-external-api) for a complete example.

## Handle credentials

For now, the simplest option is to hardcode the credential in private automation source. Keep it inside the action handler's closure rather than passing it through action inputs or signals.

Create a credential specifically for the automation and restrict it to the required scopes, resources, and endpoints. Add an expiration, quota, or network restriction when the provider supports one. Do not use a broad personal or administrator credential.

Anyone who can read the source can read a hardcoded credential, and rotating it requires updating and redeploying the automation. If you need centralized access control or rotation, retrieve the credential from an external secret manager instead. The external secret manager remains responsible for protecting and rotating it; Automate.ax does not manage custom credentials.

If Automate.ax already supports the service, use its [integration accounts](/concepts/integration-accounts) instead. Those accounts keep provider credentials out of automation source and let the platform manage authorization and refresh.
