503 CONNECTOR_NOT_REGISTERED and nothing is executed.
A self hosted deployment starts with no connector configured. You add one by giving the api service the connector’s variables.
Add the variables
Create a file nameddocker-compose.override.yml in the repository root. Docker Compose reads it together with docker-compose.yml on every command, so nothing else changes. Example for the Paytm connector, which forwards authorized refunds to your parmana-paytm-agent service:
${...:?...} form reads the secret from your shell or from .env, so it is not written into the file, and it stops Compose with a clear message when it is missing:
PAYTM_CONNECTOR_SHARED_SECRET set, or in .env, for every later docker compose command. Every command reads the override file.
Check: curl -s http://127.0.0.1:3000/ready returns "status":"READY", and a request the policy authorizes no longer returns CONNECTOR_NOT_REGISTERED. It returns the connector’s result instead.
Connector variables
What each variable accepts: Environment variable reference, Connectors.
Only the Paytm connector has been run on the self hosted deployment, by the offline check. HubSpot, Slack and GitHub use the same server code as the hosted API but call services on the internet, so a deployment that uses them is not isolated from the internet.
Rules the server enforces
- HTTPS only.
PAYTM_CONNECTOR_URLmust start withhttps://. Otherwise the server refuses to start withPAYTM_CONNECTOR_URL must use HTTPS in production; received "...". Refusing to start with a plaintext connection configured to the trusted Paytm connector service. - Both or neither. Setting only one of
PAYTM_CONNECTOR_URLandPAYTM_CONNECTOR_SHARED_SECRETstops the server at start. - Capability on the key. A key can request
paytm:refundonly if it was added with--allowed-capabilities paytm:refund. See Manage API keys.
A connector with a certificate from your own authority
If your connector’s certificate is issued by an internal certificate authority, the server must trust that authority. Mount its certificate into theapi container and point NODE_EXTRA_CA_CERTS at it:
docker-compose.yml; it does not replace them. The certificate is added to the ones Node.js already trusts; it replaces none. The offline check uses exactly this mechanism for its stand in connector.
When the connector cannot be reached
The action has already been authorized, and an Execution Intent signed and stored, before the connector is called. If the call then fails:- the caller gets
502with codeEXECUTION_OUTCOME_UNKNOWN, and a message naming thebusinessTransactionIdandauthorizationId. The connector’s own error is never in the response; - the Execution Intent is stored in state
ERRORED, with the cause as itsfailureReason; - the API log has a critical
execution_outcome_unknownevent with the cause, for examplegetaddrinfo ENOTFOUND paytm-agent.internal.example.com.
businessTransactionId. Check your system, then close the intent with what you found: POST /execution-intents/{id}/resolve. The full procedure is in Troubleshooting.
Before 2026-09-25 the caller got a bare 500 Internal Server Error here instead.