Service Limits
This page lists the hard and soft limits that apply to CRE Connect resources. All hard limits are enforced server-side and are reflected in the OpenAPI specification (/api/crec/openapi.json); rate limits and per-environment quotas are negotiated with the Chainlink team.
Enforced via the OpenAPI RSASignersList and ECDSASignersList schemas (maxItems: 10, minItems: 0, uniqueItems: true).
| Limit | Value | Notes |
|---|
allowed_ecdsa_signers per wallet | 0–10 | Unique 42-character 0x Ethereum addresses. |
allowed_rsa_signers per wallet | 0–10 | Unique RSA public keys ({e, n} hex). |
| RSA modulus minimum | 2048 bits | n must be hex of ≥ 256 bytes. |
| RSA exponent | 2–17 bytes | e is hex; common values are 0x010001 (= 65537). |
Wallet name | 1–255 chars | Non-blank. |
Wallet description | 1–255 chars | Non-blank. |
A wallet's signer set is fixed at creation time. To rotate signers today, archive the old wallet and provision a new one with the updated lists; see Manage Signers.
| Limit | Value | Notes |
|---|
Watcher name | 4–255 chars | Validated by the SDK (ErrWatcherNameTooShort). |
| Service watchers per channel | per-environment | Soft limit: contact support to raise. |
| ABI watchers per channel | per-environment | Soft limit. |
| Events list per ABI watcher | 1+ | At least one event must be supplied (ErrEventsRequired). |
| ABI types accepted | only event | ErrInvalidABIType for any other ABI fragment. |
| Limit | Value | Notes |
|---|
Channel name | 1–255 chars | Non-blank. |
Channel description | 1–255 chars | Non-blank. |
| Active watchers required to archive | 0 | A channel cannot be archived while any watcher is active. |
| Limit | Value | Notes |
|---|
| Transactions per operation | 1–16 | At least one transaction (ErrAtLeastOneTransactionRequired). |
wallet_operation_id | unique per (wallet, chain) among non-terminal statuses | Enforces single-use idempotency. Can be reused after cancelled / expired / failed. |
| Deadline | non-negative int64 | ErrInvalidDeadline for negative or overflowing values. 0 = no expiration. |
| Deadline buffer | 60 seconds | Server rejects finalize 60s before on-chain deadline to allow relay time. |
| Limit | Value | Notes |
|---|
| Default TTL | 5 minutes | Queries expire if no terminal callback arrives within this window. |
| Metadata size | max 16 KB | Optional metadata field on query create. |
from_address | optional | Defaults to zero address (0x0000…0000) if omitted. |
| Block selection | latest, finalized, block_number | Note: safe is not available for queries (only for watchers). |
All listing endpoints (/wallets, /channels, /channels/{id}/watchers, /channels/{id}/operations, /channels/{id}/queries, /channels/{id}/events) accept limit and either offset or a time-based cursor. Per-page maxima are enforced server-side; the response always includes has_more: bool so applications can paginate without knowing the cap. Refer to the interactive REST reference for each endpoint's exact limit parameter and any server-side cap.
When you exceed a rate limit, the API returns 429 Too Many Requests. The Go SDK's watcher polling helpers (WaitForActive / WaitForArchived) classify 429 as transient and continue to the next poll tick; for every other endpoint the SDK does not retry: implement your own retry logic. See Error Handling for the full classification.
| Limit | Value | Notes |
|---|
| HTTP request timeout | none unless you set one | When you don't pass crec.WithHTTPClient, the SDK uses Go's http.DefaultClient, which has no timeout. Provide an *http.Client with Timeout set in production. |
| WebSocket support | not currently exposed | All event delivery is over HTTP polling. |
| Limit | Value | Notes |
|---|
DefaultMinRequiredSignatures | 4 | F+1 where F = 3 (production DON BFT). Don't raise; see SDK Configuration. |
DefaultValidSigners | 10 production DON keys | Override with WithEventVerification for non-production environments. |