Security and limits
Spending authority needs an explicit boundary. Conversation is not a signature, and technical integration is not an audit.
Implemented controls
- Tenant authentication and scopes; environment-specific resources and credentials.
- Attempt idempotency, unique burn hash, CCTP nonce and persisted reconciliation.
- Verification of the Circle message and exact authorization; vault limits and pause.
- Mainnet guards and separation between integration API and signer.
- Fail-closed start: if the TILCAI_API_KEYS keys cannot be synced, the process does not start, instead of going on accepting a key the operator retired. Logs never show key values.
- Readiness separate from liveness: /ready does not announce payment capability without an authenticated relayer configured for the right network.
What remains open
Nothing described here has been audited. Whether Cloud Run keeps a single writer during deployments and restores still has to be validated in staging: during a rollout two instances coexist, one per revision (see Operations and deployment). Independent audit, a complete mainnet contract registry, tested account recovery, limited agent delegation, concurrent-load validation, and operational backup and recovery remain open. Reputation is not an established production control.
If a request times out
Keep paymentId and hashes; query and reconcile. Do not generate a second payment to resolve an uncertain one. Relayer notifications and screenshots do not replace on-chain evidence or authenticated bank confirmation.
Out of scope for now
Autonomous trading, wrapped-asset bridges, purchases without a commercial adapter and fiat conversion without a verified provider. CCTP moves native USDC and does have documented routes, including Avalanche Fuji and Monad Testnet to Stellar Testnet and Avalanche C-Chain to Stellar Public Network.
Availability depends on your instance. Check /health and /v1/routes before integrating.
