Skip to main content

Custom profiles

A Custom profile is a pool of your own nodes and provider accounts, routed by the same engine as Lasso’s managed pools. Every key of the account reaches it at /profile/<slug>/…. Create one when you already pay for providers or run nodes and want failover, latency routing and evidence over them.
The dry run checks every new provider, changes nothing, and needs no Custom access. Saving needs Custom access: an account that has never had it gets five free days on its first saved profile; otherwise subscribe, or buy days with a wallet (trial your own providers). Then repeat the PUT without dry_run and call it:

The document

The profile is one JSON document: the whole desired state. The dashboard edits the same document, so a profile an agent builds looks and behaves the same for everyone on the account. The minimum is a chain with a provider list; every other field is optional: Chains are keyed by name or decimal ID. The live field list, limits and workload recipes are in the configuration schema. Editing rules:
  • Omit a provider, and it’s removed; a dry run lists every removal.
  • Omit url on a provider you’re keeping, and its stored URL stays.
  • Omit headers, and stored headers stay; {} clears them; a map replaces them all.
  • Send If-Match: <revision> to refuse the change if someone else changed the profile since you read it. After a lost response, re-read the revision rather than repeating the PUT blindly.

Onboarding: what Lasso checks

When you save, Lasso checks the chain identity (eth_chainId) of every new or changed provider before storing anything: A newly created profile has no live revision yet: it reports activating with retry_after_seconds until its first revision is ready, and RPC on it refuses with a retryable 503 (service_initializing) until then. Read GET /api/v1/profiles/{slug} until it reports live before moving traffic. Saving a replacement to an already-live profile is different: RPC keeps serving the previous revision while the replacement activates. A chain whose providers are all still verifying keeps its previously verified configuration, settings included, until a later identity check verifies one. A chain with both verified and verifying providers publishes the verified subset and its new settings immediately. Only a new chain with no previously verified configuration returns a retryable 503 (profile_config_unavailable) until a provider verifies; other chains on the same profile keep serving.

Head tracking

Lasso tracks each provider’s block height from the requests routed through it and a light background poll. Choose a mode per provider: Head modes don’t change which providers serve client subscriptions. Omitting heads when you replace the document resets it to passive.

Lasso learns your providers

You supply URLs and intent. Lasso works out the rest from health checks and live traffic: historical depth per method, methods a provider refuses, its eth_getLogs span limit, whether it’s exhausting a quota, and whether its plan refuses the chain outright. GET /api/v1/profiles/{slug} shows that knowledge for each provider, with its source, configured mode and effect:
configured_mode is the profile’s setting for that kind of knowledge: off, shadow (Lasso observes without acting), or on (changes routing). effect is what’s applied right now: it matches configured_mode, or reports suspended while you’ve paused that hint; suspended mirrors the same state as a boolean. Learned historical depth, method refusals, eth_getLogs span limits, quota exhaustion and chain-plan refusal are on by default. Matching method, depth and span limits move a provider behind alternatives. Quota exhaustion and chain-plan refusal (capability_refusal) instead report effect: "excluded" while they skip the affected credential until revalidation succeeds. Both behaviors keep one last route when every candidate is excluded. Declare limits only for what you know better than Lasso; declared limits outrank learned ones. How Lasso learns your providers explains how learning works and stays correct. To correct what Lasso learned, call DELETE /api/v1/profiles/{slug}/providers/{name}/knowledge, or use the dashboard’s Learned behavior panel: select a node to see its HTTP and WebSocket evidence, Reset knowledge for one transport, or Suspend 1h to pause one hint. Set a provider’s background_observations: false to stop all background checks and idle recovery on it.

Block protection

Set "block_protection": true on a chain, and sequential latest-block requests (eth_blockNumber, eth_getBlockByNumber("latest")) never return a lower height on the same Lasso server. The behavior, scope and errors are on block regression protection. To read several values at one block, use read at one block instead; it works without protection.

Workload recipes

Other operations

Limits

  • Holding a Custom profile needs Custom access; a dry run doesn’t. An account that has never had Custom access gets five free days on its first saved profile; provisional accounts can also buy Custom access with a wallet. See trial your own providers.
  • An account holds up to five Custom profiles.
  • If Custom access lapses, the profile is kept and its URLs are served as premium until you renew. Open WebSocket connections on it close with custom_access_expired.
  • block_protection holds per Lasso server.
  • Onboarding checks chain identity only. Test your exact archive queries through the profile.

Next