Skip to main content
Most real tools need a credential. This walks through the whole flow: declaring what the credential is, storing its value, and adding the extras your endpoint needs but the agent must never see.

The two halves

Credentials are split deliberately: Keeping them apart means you can inspect a tool’s auth setup without exposing the secret, and rotate the secret without touching the shape.

Creating it

The three parameter maps

This is the part worth internalising — each map exists for a different trust level.

dynamic

The model fills these in. Extracted from the conversation. Treat as untrusted input.

static

Never seen by the model. Sent on every call. For values it has no business knowing or inventing.

automatic

Filled by the platform. KNOWN_PARAM_CALL_ID tells your backend which live call it is being asked about.
clinicId is static for a reason: if it were dynamic, a caller could talk the agent into booking at a different clinic. Anything that identifies who is asking rather than what they want belongs in staticParameters.
A parameter name may appear in only one of the three maps. Reusing a name across two is rejected with 400, because which value wins would be ambiguous.

Credential shapes

Declare exactly one per requirement:
options is a list of acceptable alternatives — satisfying any one entry is enough. That’s how you say “either an API key or a bearer token”:
You may then fill only one of them.

The typo guard

Every key in authTokens must be declared in httpSecurityOptions.options[].requirements. Otherwise:
Without that check the typo would save happily, never satisfy the real bookingKey requirement, and surface weeks later as an unexplained 401 from your own endpoint with nothing useful in the logs. The reverse is not enforced — declaring two alternatives and filling one is intentional.

Checking and rotating

Credential values are never returned. A GET shows which slots are filled:
Rotate by sending only the new value:
Clear every slot with "authTokens": null. The same null-clears rule applies to agentReaction, httpSecurityOptions, and timeout.

Your endpoint receives

Return something the agent can speak:
Or a shaped failure it can work with:
baseUrlPattern cannot point at an internal address. RFC 1918 ranges, loopback, IPv6 unique-local, and link-local — including the cloud metadata endpoint at 169.254.169.254 — are all rejected. A tool is a URL the model can cause your infrastructure to call, so it cannot be aimed inward.

Slow endpoints

Work that cannot finish in 40 seconds.

Full tool reference

Every option.