Changes

Submit a change in any registered domain

Changed on

One body for every domain, token images included; an API key must send evidence. A key needs the domain's :propose or :write capability; the server computes the op class, runs its checks and decides with the domain policy, and an active suspension turns an auto-apply into a proposal. A stale expectedVersion records a superseded change; the same actor's open proposal on the target is superseded by the new one. A token keeps one intrinsic APY source. A yield-sources or yield-pools change that turns an entry on, as an add or an enable, returns 409 with details.reason one-apy-source while the token has another enabled yield source or DefiLlama pool, or is a Pendle PT that has not matured; details.apySources names the other source and the message says how to switch. This holds for every actor, platform sessions included. A key's proposal is refused at submit, and an approval or a revert that would turn a second source on is refused the same way. Disabling, removing or editing a source is always allowed. To switch, send the new source and the change that disables or removes the old one together to POST /v3/changes/batch. A platform session's dismiss applies only while the work list's dismiss rule holds, and returns 409 otherwise; a key's dismissal is a proposal, checked again when an admin approves it. A geo update or remove must name a stored rule; a derived address row from GET /v3/geo-policies cannot be changed and returns 404. A price-sources fill from a key or a system actor applies on its own only when every fill check passes, provider-fresh included, which needs the provider's own time for its price (CoinGecko last_updated_at, DefiLlama timestamp, Pyth publish_time, or for an ERC-4626 share the time of the underlying's stored V3 price) to be at most 24 hours old and at most 5 minutes ahead. An ERC-4626 fill also needs asset() to be the identifier, any decimals override to equal the chain's, and the underlying to have a positive V3 price, taken as V3 selects it from any source, the on-chain fallback and other shares included. Pendle gives no price time; its price is a current quote, so the time of the read stands for it. A Pendle fill applies on its own only for the PT itself, when V3 has a Pendle market for it on a chain the Pendle price source supports and Pendle prices it above 0; a matured PT that Pendle still prices qualifies, at its redemption value. A Pyth source never applies on its own. When a provider or the chain cannot answer for a fill that could apply on its own (no current entry, a CoinGecko, DefiLlama, ERC-4626 or Pendle source, not disabled, from a key with price-sources:write or a system actor, and no active suspension), the change is not recorded and the request returns 503; send it again later. Any other change is recorded as a proposal with the failed checks. For token images, dispatches permissions by registered domain. token-images:propose permits staged candidates and token-images:write permits a verified CoinGecko or Pendle fill. Replacements and removals always remain proposals. The derive operation builds a Pendle PT's logo server-side from the current managed image of the token named in the optional value.source (by default the PT's recorded underlying in token_integrations), as a circle crop with the teal #17e3c2 PT ring, recorded with derivedFrom (source digest) in its derive-source check. A platform session applies a derive; a system actor applies only an empty-slot fill from the recorded underlying's verified-provider image; any other derive is a proposal. A target that is not a Pendle PT returns 400; a source without a managed image, or one that already carries the ring, returns 409. A verified fill requires an eligible token class, empty managed slot, exact chain-and-contract provider match, and verified legacy cutover. Incomplete cutover or provider unavailability returns 503. API-key responses omit operator attribution. The generic change has expected/resulting versions and database decision order; token image snapshots and provider evidence are stored in a domain detail record.

post/v3/changes

Request

  • Base URL
    https://v3.euler.finance
  • URL
    https://v3.euler.finance/v3/changes
  • Auth
    API key in header X-API-Key

Query parameters

dryRunboolean

Runs the checks and the policy and returns the decision without writing or staging anything.

Request body

domain'token-images' | 'price-sources' | 'yield-sources' | 'yield-pools' | 'token-tags' | 'trust-entries' | 'screening-waivers' | 'geo' required
operationstring required
keystring required

The domain's target key, in the keyFormat that GET /v3/changes/domains serves: <chainId>:<address> for token images and for every dismissal or resume, <source>/<chainId>:<address> for price sources, <tag>:<ruleType>:<value> for token tags (rule types symbols, symbolPrefixes, symbolContains, coingeckoCategories, and addresses, whose value names one token as <chainId>:<address> in any case and is stored lowercase), and the address for screening waivers.

valueunknown
expectedVersionstring nullable required

The version the caller read; null when the target is empty. A stale version supersedes the change. Read it from GET /v3/changes/targets/{domain}?key=… (or GET /v3/changes/targets/price-sources/{chainId}/{address} for every source of a token).

reasonstring required
rationalestring nullable

Response

No exact provider candidate (token images), or a dry-run decision

OR
object required

Changes

    • info

      added the new screening-waivers enum value to the request property

    • info

      added the optional property ///// to the response with the status