For AI agents: Documentation index at /llms.txt

Skip to content

IC Interface Spec Changelog

  • Canister signatures from canisters on subnets of type cloud_engine are not valid.
  • New HTTP endpoints for update calls (to create a canister by subnet admins) and query calls (to list all canisters on a subnet by subnet admins) whose URL contains the (effective) subnet ID on which the canister is created or whose canisters should be enumerated.
  • Update and query calls by users authenticated via canister signatures can carry auxiliary information signed by a canister signature issued by the same canister. That information is passed via a new sender_info field of the user HTTP request and available to the callee via new system API ic0.msg_caller_info_data_size, ic0.msg_caller_info_data_copy, ic0.msg_caller_info_signer_size, and ic0.msg_caller_info_signer_copy.
  • Added query call for subnet admins to list all canisters on a subnet.
  • Added subnet admins who can start, stop, uninstall, delete a canister and request its status.
  • Added canister snapshot visibility settings.
  • Support for the HTTP methods PUT and DELETE in canister http_request in non-replicated mode.
  • Added subnet type to the certified state tree at the path /subnet/<subnet_id>/type.
  • Support for canister renaming (required for canister ID migration from one subnet to another subnet).
  • The management canister’s endpoint take_canister_snapshot can uninstall code atomically after taking canister snapshot.
  • The canister system API ic0.msg_reject_code is available in cleanup callbacks.
  • New execution context TQ for canister http transform functions to specify that no IC certificate is available in such executions.
  • Canister memory allocation does not limit canister memory usage.
  • Management canister endpoint canister_status can be invoked as a query call.
  • Allow loading a canister snapshot onto a different canister on the same subnet.
  • New management canister API providing canister metadata (contained in canister WASM custom sections).
  • New HTTP handler endpoints to support canister migration (by providing sharded routing table in certificates): /api/v4/canister/<effective_canister_id>/call, /api/v3/canister/<effective_canister_id>/read_state, /api/v3/subnet/<effective_subnet_id>/read_state, and /api/v3/canister/<effective_canister_id>/query.
  • The following existing HTTP handler endpoints are marked as deprecated: /api/v3/canister/<effective_canister_id>/call, /api/v2/canister/<effective_canister_id>/read_state, /api/v2/subnet/<effective_subnet_id>/read_state, and /api/v2/canister/<effective_canister_id>/query.
  • Paths with prefix /subnet/<subnet_id>/canister_ranges (legacy routing table) can only be requested via the deprecated endpoints or if <subnet_id> is the root subnet.
  • Paths with prefix /canister_ranges/<subnet_id> (sharded routing table) can only be requested via /api/v{2,3}/subnet/.../read_state, i.e., not via /api/v{2,3}/canister/.../read_state.
  • All paths with prefix /canister_ranges/<subnet_id> must refer to the same subnet ID <subnet_id>.
  • Added support for non-replicated canister HTTP outcalls.
  • Added support for canister environment variables in canister settings and new System API for accessing environment variables (ic0.env_var_count, ic0.env_var_name_size, ic0.env_var_name_copy, and ic0.env_var_value_size).
  • Management canister API for downloading and uploading canister snapshots.
  • The management canister method canister_status returns two new fields: version indicating the canister version, and ready_for_migration indicating whether a canister’s queues are empty and its streams flushed. The value only makes sense when the canister status is stopped.
  • Canister history provides the source of a snapshot in the entry for loading the snapshot.
  • Canister ranges of every subnet are now available at a dedicated prefix /canister_ranges in the state tree, facilitating fragmentation due to canister migration.
  • The management canister method subnet_info returns a new field registry_version providing the registry version of the corresponding subnet.
  • VetKD API is considered stable.
  • New system API ic0.root_key_{size, copy} for fetching the public key of the IC root key.
  • Management canister API for threshold key derivation (vetKD).
  • Non-ASCII characters are allowed in the URL of canister http outcalls.
  • The transformed response size of canister http outcalls must not exceeded max_response_bytes (if provided).
  • Threshold Schnorr API, composite query methods, and canister logs management canister API are considered stable.
  • Reverted a lower bound of one week on the canister’s freezing threshold.
  • Introduced a lower bound of one week on the canister’s freezing threshold.
  • Bounded-wait calls.
  • New system API ic0.canister_liquid_cycle_balance128 returning the current amount of cycles that is available for spending in calls and execution.
  • A canister can have multiple snapshots.
  • New canister method canister_on_low_wasm_memory invoked when the canister is low on main memory according to a new wasm_memory_threshold in canister settings.
  • New system APIs ic0.cost_call, ic0.cost_create_canister, ic0.cost_http_request, ic0.cost_sign_with_ecdsa, ic0.cost_sign_with_schnorr, and ic0.cost_vetkd_derive_encrypted_key for cycles cost calculation.
  • New field memory_metrics providing detailed metrics on the memory consumption of a canister in the response of the management canister’s canister_status endpoint.
  • New system API ic0.subnet_self_size and ic0.subnet_self_copy.
  • Allow accepting and burning cycles in replicated queries.
  • Add support for Schnorr auxiliary inputs
  • Add management canister endpoint subnet_info.
  • Support for wasm64: 64-bit system API.
  • Allow anonymous query and read state requests with invalid ingress_expiry.
  • Add allowed viewers variant to canister log visibility.
  • Deprecate the Bitcoin API of the management canister.
  • Add new management canister methods for canister snapshot support.
  • EXPERIMENTAL: Management canister API to fetch Bitcoin block headers.
  • Synchronous update call API at /api/v3/canister/.../call.
  • EXPERIMENTAL: Management canister API for threshold Schnorr signatures.
  • Query call statistics.
  • New wasm_memory_persistence option for canister upgrades.
  • Rename num_blocks_total to num_blocks_proposed_total in node metrics served by the management canister.
  • Management canister query call to fetch canister logs.
  • WASM heap memory limit in canisters settings.
  • 32-bit stable memory System API is marked DEPRECATED.
  • Remove the management canister query calls bitcoin_get_balance_query and bitcoin_get_utxos_query.
  • Wrap chunk hash for install chunked code in a record and rename storage_canister to store_canister.
  • Update subnet read state request conditions on requested paths.
  • Fix: allow inter-canister calls (requests) to be spontaneously rejected in the abstract spec.
  • The maximum length of a nonce in an ingress message is 32 bytes.
  • Update specification of responses from the endpoint /api/v2/status.
  • Stop canister calls might be rejected upon timeout.
  • The IC sends a user-agent header with the value ic/1.0 in canister HTTPS outcalls if the canister does not provide one.
  • Add a management canister method for retrieving node metrics.
  • Specify the resource reservation mechanism.
  • Allow in_replicated_execution system API method to be executed during canister_start.
  • Set the maximum depth of a delegation in a read_state response/certified variable certificate to 1.
  • Canister version is guaranteed to increase if the canister’s running status changes.
  • Calls to frozen canisters are rejected with SYS_TRANSIENT instead of CANISTER_ERROR.
  • Add API boundary nodes information into the certified state tree.
  • Add metrics on subnet usage into the certified state tree and a new HTTP endpoint /api/v2/subnet/<subnet_id>/read_state for retrieving them.
  • Add management canister methods to support installing large WebAssembly modules split into chunks.
  • Add a system API method to determine if the canister is running in replicated or non-replicated mode.
  • Add a system API method to burn cycles of the canister that calls this method.
  • Add a check that a canister receiving an ingress message is Running before the ingress message is marked as Received.
  • Increase the maximum number of globals in a canister’s WASM.
  • Add per-call context performance counter.
  • Update the computation of the representation-independent hash for the case of maps with nested maps.
  • Remove senders field from user delegations.
  • Canister cycle balance cannot decrease below the freezing limit after executing install_code on the management canister.
  • System API calls ic0.msg_caller_size and ic0.msg_caller_copy can be called in all contexts except for (start) function.
  • Added note on confidentiality of values in the certified state tree.
  • Update algorithm computing the request and response hash in the HTTP Gateway including clarification of when the HTTP Gateway can allow for arbitrary certification version in the canister’s response.
  • Update conditions on requested paths in HTTP read state requests.
  • Added new query methods in the Bitcoin API.
  • Added node public keys to certified state and node signatures to query call responses.
  • Added a new mode for canister upgrades skipping pre-upgrade method’s execution.
  • IC Bitcoin API, ECDSA API, canister HTTPS outcalls API, and 128-bit cycles System API are considered stable.
  • Add conditions on requested paths in read state requests.
  • Add composite queries.
  • Specify that the canister version is incremented upon every successful message execution except for successful message execution of a query method.
  • canister version can be specified in some management canister calls (canister creation, canister code changes, canister settings changes)
  • IC records canister history (canister creation, canister code changes, and canister controllers changes)
  • added a new canister_info management canister call returning current module hash, current controllers, and canister history
  • added a new system API call ic0.is_controller (checking if a principal is a controller of the canister)
  • stable memory System API calls can be invoked in the WebAssembly module (start) function
  • the system API call ic0.global_timer_set can be invoked in canister pre-upgrade
  • added modeling WASM start function in the concrete CanisterModule specification
  • WebAssembly module requirements have been revised (relaxed max number of declared functions and globals, added conditions on exported functions)
  • certified variables are cleared if a canister is reinstalled
  • a canister having an open call context marked as deleted cannot reach Stopped state
  • a desired canister ID of the canister created by provisional_create_canister_with_cycles (in testing environments) can be specified using specified_id
  • conditions on envelope delegations have been revised (relaxed max number of delegations, restricted max number of targets per delegation, forbidden cycles in the delegation chain)
  • added a new optional field senders in envelope delegations (restricting users to which a delegation applies)
  • all /request_status/<request_id> paths must refer to the same request_id in a read_state request
  • IC protocol execution error conditions (such as failing inspect_message method of a canister) are returned as 200 HTTP responses with a cbor body describing the error (instead of 4xx or 5xx HTTP responses)
  • Global timers
  • Canister version
  • Clarifications for HTTP requests & Bitcoin integration costs
  • Updated HTTP request API
  • Canister status available to canister
  • 64-bit stable memory is no longer experimental
  • HTTP request API
  • Reserved principals
  • Canister access to performance metrics
  • Query calls are rejected when the canister is frozen
  • Support for implementation-specific error codes for requests
  • Deleted call contexts do not prevent canister from reaching Stopped state
  • Update effective canister id checks in certificate delegations
  • Formal model in Isabelle
  • Idle consumption of resources in cycles per day can be obtain via canister_status method of the management canister
  • Include the HTTP Gateway Protocol in this spec
  • Clarifications in definition of cycles consumption
  • Canister cycle balances are represented by 128 bits, and no system-defined upper limit exists anymore
  • Canister modules can be gzip-encoded
  • Expose Wasm custom sections in the state tree
  • EXPERIMENTAL: Canister API for accessing Bitcoin transactions
  • EXPERIMENTAL: Canister API for threshold ECDSA signatures
  • New System API which uses 128-bit values to represent the amount of cycles
  • Subnet delegations include a canister id scope
  • Canister heartbeat
  • Terminology changes
  • Support for 64-bit stable memory
  • Support RSA PKCS#1 v1.5 signatures in web authentication
  • Spec clarification: Fix various typos and improve textual clarity
  • A canister has a set of controllers, instead of always one
  • Canister Signatures are introduced
  • Spec clarification: the signature in the WebAuthn scheme is prefixed by the CBOR self-identifying tag
  • Cycle-depleted canisters are forcibly uninstalled
  • Canister settings in create_canister and update_settings. install_code no longer takes allocation settings.
  • A freezing threshold can be configured via the canister settings
  • The cleanup callback is introduced
  • New http v2 API that allows for stateless boundary nodes
  • The system may impose limits on the number of globals and functions
  • No ingress messages towards empty canisters are accepted
  • No ingress messages towards raw_rand and deposit_cycles are accepted
  • A memory allocation of 0 means “best effort”
  • deposit_cycles(): any caller allowed
  • Ingress message filtering
  • Add ECDSA signatures on curve secp256k1
  • Clarify that the ic0.data_certificate_present system function may be called in all contexts.
  • Expose module hash and controller via read_state
  • The document is renamed to “Internet Computer Interface Spec”
  • Support for raw Ed25519 keys is removed
  • The default memory_allocation becomes unspecified
  • Support for funds is scaled back to only support cycles
  • The ic0.msg_cycles_accept system call now returns the actually accepted cycles
  • The provisional_ management calls are introduced
  • The ic0.canister_status system call
  • Delegation between user public keys
  • Certification (also removes “request-status” request)
  • User authentication method based on WebAuthn is introduced
  • User authentication can use ECDSA
  • Public keys are DER-encoded
  • Return more information in the canister_status management call
  • Anonymous requests must have the sender field set
  • The deposit_funds call
  • Inter-canister calls are now performed using a builder-like API
  • Support for funds (balances and transfers)
  • The anonymous user is introduced
  • Forward-port changes from 0.9.3
  • Users can set/update a memory allocation when installing/upgrading a canister.
  • The expiry field is added to requests
  • The management canister supports the raw_rand method
  • Canister controllers can stop/start canisters and can query their status.
  • Canister controllers can delete canisters
  • Forward-port changes from 0.8.2
  • Introduction of a domain separator (again)
  • The calculation of “derived ids” has changed
  • The self-authenticating and derived id forms use a truncated hash
  • The textual representation of principals has changed
  • Installing code via reinstall works also on the empty canister
  • Reflect refined process in README and intro.
  • ic0.time added
  • Revert the introduction of a domain separator
  • Fix meaning-changing typos in ic.did
  • Make all canister ids system-chosen
  • HTTP requests for management features are removed
  • (editorial) the term “principal” is now used for the id of a canister or user, not the canister or user itself
  • The signature of a request needs to be calculated using a domain separator
  • Describe the controller attribute, add a request to change it
  • The IC management canister is introduced
  • More tests about calls from query methods
  • Bugfix: Mode should be reinstall, not replace
  • Include section with CDDL description
  • simplify versioning (only three components), skip 0.2.2 to avoid confusion with 0.2.0.2
  • Clarification: reply field is always present
  • General cleanup based on front-to-back reading
  • This is the first release. Subsequent releases will include a changelog.