IC interface spec changelog
Changelog
Section titled “Changelog”0.65.0 (2026-07-31)
Section titled “0.65.0 (2026-07-31)”- New management canister endpoint
subnet_metricsreturning subnet-wide metrics for a given subnet: the latest certified height, the number of canisters, the total canister state size, the total cycles consumed, and the total number of processed transactions. All fields except the certified height were previously only readable by external users via the certified state tree path/subnet/<subnet_id>/metrics. The API is EXPERIMENTAL.
0.64.0 (2026-07-06)
Section titled “0.64.0 (2026-07-06)”- New optional
permissionsfield in request delegations restricting the kinds of requests the delegation applies for: the value"queries"restricts the delegation to query calls andread_staterequests, so update calls carrying such a delegation in their chain of delegations are not accepted; the value"all"permits all kinds of requests, same as omitting the field. Requests of any kind carrying a delegation with any other value of thepermissionsfield are not accepted. wasm_memory_thresholdin canister settings is now bounded by 248, analogously towasm_memory_limit.- New canister setting
minimum_incoming_canister_call_cycles: if set, inter-canister calls from a different canister that attach fewer cycles than this threshold are rejected withCANISTER_ERRORand all attached cycles are refunded. Ingress messages and self-calls are not affected.
0.63.0 (2026-06-29)
Section titled “0.63.0 (2026-06-29)”- Support for the HTTP method
PATCHin canisterhttp_requestin non-replicated mode.
0.62.0 (2025-05-26)
Section titled “0.62.0 (2025-05-26)”- Inter-canister response callback messages might still be executed after the condition for
canister_on_low_wasm_memoryis triggered and before the functioncanister_on_low_wasm_memoryis executed. - Allow EdDSA on curve Ed25519 as a third WebAuthn signature scheme (alongside ECDSA P-256 and RSA PKCS#1v1.5).
0.61.0 (2025-05-18)
Section titled “0.61.0 (2025-05-18)”- New management canister endpoint
canister_metrics.
0.60.0 (2025-05-04)
Section titled “0.60.0 (2025-05-04)”- Canister signatures from canisters on subnets of type
cloud_engineare 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.
0.59.0 (2025-04-27)
Section titled “0.59.0 (2025-04-27)”- 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_infofield of the user HTTP request and available to the callee via new system APIic0.msg_caller_info_data_size,ic0.msg_caller_info_data_copy,ic0.msg_caller_info_signer_size, andic0.msg_caller_info_signer_copy. - Added query call for subnet admins to list all canisters on a subnet.
0.58.0 (2025-04-01)
Section titled “0.58.0 (2025-04-01)”- Added subnet admins who can start, stop, uninstall, delete a canister and request its status.
0.57.0 (2025-03-30)
Section titled “0.57.0 (2025-03-30)”- Added canister snapshot visibility settings.
0.56.0 (2025-03-16)
Section titled “0.56.0 (2025-03-16)”- Support for the HTTP methods
PUTandDELETEin canisterhttp_requestin non-replicated mode. - Added subnet type to the certified state tree at the path
/subnet/<subnet_id>/type.
0.55.0 (2025-01-26)
Section titled “0.55.0 (2025-01-26)”- Support for canister renaming (required for canister ID migration from one subnet to another subnet).
0.54.0 (2025-12-15)
Section titled “0.54.0 (2025-12-15)”- The management canister’s endpoint
take_canister_snapshotcan uninstall code atomically after taking canister snapshot. - The canister system API
ic0.msg_reject_codeis available in cleanup callbacks.
0.53.0 (2025-11-24)
Section titled “0.53.0 (2025-11-24)”- New execution context
TQfor canister http transform functions to specify that no IC certificate is available in such executions.
0.52.0 (2025-11-17)
Section titled “0.52.0 (2025-11-17)”- Canister memory allocation does not limit canister memory usage.
0.51.0 (2025-10-20)
Section titled “0.51.0 (2025-10-20)”- Management canister endpoint
canister_statuscan be invoked as a query call.
0.50.0 (2025-10-13)
Section titled “0.50.0 (2025-10-13)”- 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>.
0.49.0 (2025-10-06)
Section titled “0.49.0 (2025-10-06)”- Added support for non-replicated canister HTTP outcalls.
0.48.0 (2025-09-29)
Section titled “0.48.0 (2025-09-29)”- 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, andic0.env_var_value_size).
0.47.0 (2025-09-22)
Section titled “0.47.0 (2025-09-22)”- Management canister API for downloading and uploading canister snapshots.
0.46.0 (2025-08-25)
Section titled “0.46.0 (2025-08-25)”- The management canister method
canister_statusreturns two new fields:versionindicating the canister version, andready_for_migrationindicating whether a canister’s queues are empty and its streams flushed. The value only makes sense when the canister status isstopped. - Canister history provides the source of a snapshot in the entry for loading the snapshot.
0.45.0 (2025-08-18)
Section titled “0.45.0 (2025-08-18)”- Canister ranges of every subnet are now available at a dedicated prefix
/canister_rangesin the state tree, facilitating fragmentation due to canister migration.
0.44.0 (2025-08-11)
Section titled “0.44.0 (2025-08-11)”- The management canister method
subnet_inforeturns a new fieldregistry_versionproviding the registry version of the corresponding subnet.
0.43.0 (2025-07-17)
Section titled “0.43.0 (2025-07-17)”- VetKD API is considered stable.
0.42.0 (2025-06-06)
Section titled “0.42.0 (2025-06-06)”- New system API
ic0.root_key_{size, copy}for fetching the public key of the IC root key.
0.41.0 (2025-06-02)
Section titled “0.41.0 (2025-06-02)”- Management canister API for threshold key derivation (vetKD).
0.40.0 (2025-05-30)
Section titled “0.40.0 (2025-05-30)”- 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).
0.39.0 (2025-05-07)
Section titled “0.39.0 (2025-05-07)”- Threshold Schnorr API, composite query methods, and canister logs management canister API are considered stable.
0.38.0 (2025-04-18)
Section titled “0.38.0 (2025-04-18)”- Reverted a lower bound of one week on the canister’s freezing threshold.
0.37.0 (2025-04-11)
Section titled “0.37.0 (2025-04-11)”- Introduced a lower bound of one week on the canister’s freezing threshold.
0.36.0 (2025-03-31)
Section titled “0.36.0 (2025-03-31)”- Bounded-wait calls.
0.35.0 (2025-03-20)
Section titled “0.35.0 (2025-03-20)”- New system API
ic0.canister_liquid_cycle_balance128returning the current amount of cycles that is available for spending in calls and execution. - A canister can have multiple snapshots.
0.34.0 (2025-03-07)
Section titled “0.34.0 (2025-03-07)”- New canister method
canister_on_low_wasm_memoryinvoked when the canister is low on main memory according to a newwasm_memory_thresholdin 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, andic0.cost_vetkd_derive_encrypted_keyfor cycles cost calculation. - New field
memory_metricsproviding detailed metrics on the memory consumption of a canister in the response of the management canister’scanister_statusendpoint.
0.33.0 (2025-02-12)
Section titled “0.33.0 (2025-02-12)”- New system API
ic0.subnet_self_sizeandic0.subnet_self_copy.
0.32.0 (2025-01-23)
Section titled “0.32.0 (2025-01-23)”- Allow accepting and burning cycles in replicated queries.
0.31.0 (2025-01-09)
Section titled “0.31.0 (2025-01-09)”- Add support for Schnorr auxiliary inputs
0.30.0 (2024-11-19)
Section titled “0.30.0 (2024-11-19)”- Add management canister endpoint
subnet_info. - Support for wasm64: 64-bit system API.
0.29.0 (2024-11-14)
Section titled “0.29.0 (2024-11-14)”- 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.
0.28.0 (2024-10-11)
Section titled “0.28.0 (2024-10-11)”- Add new management canister methods for canister snapshot support.
0.27.0 (2024-09-20)
Section titled “0.27.0 (2024-09-20)”- EXPERIMENTAL: Management canister API to fetch Bitcoin block headers.
- Synchronous update call API at
/api/v3/canister/.../call.
0.26.0 (2024-07-23)
Section titled “0.26.0 (2024-07-23)”- EXPERIMENTAL: Management canister API for threshold Schnorr signatures.
0.25.0 (2024-06-14)
Section titled “0.25.0 (2024-06-14)”- Query call statistics.
- New
wasm_memory_persistenceoption for canister upgrades. - Rename
num_blocks_totaltonum_blocks_proposed_totalin 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_queryandbitcoin_get_utxos_query.
0.24.0 (2024-04-23)
Section titled “0.24.0 (2024-04-23)”- Wrap chunk hash for install chunked code in a record and rename
storage_canistertostore_canister. - Update subnet read state request conditions on requested paths.
- Fix: allow inter-canister calls (requests) to be spontaneously rejected in the abstract spec.
0.23.0 (2024-03-06)
Section titled “0.23.0 (2024-03-06)”- 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-agentheader with the valueic/1.0in 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_executionsystem API method to be executed duringcanister_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_TRANSIENTinstead ofCANISTER_ERROR. - Add API boundary nodes information into the certified state tree.
0.22.0 (2023-11-15)
Section titled “0.22.0 (2023-11-15)”- Add metrics on subnet usage into the certified state tree and a new HTTP endpoint
/api/v2/subnet/<subnet_id>/read_statefor 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
sendersfield from user delegations.
0.21.0 (2023-09-18)
Section titled “0.21.0 (2023-09-18)”- Canister cycle balance cannot decrease below the freezing limit after executing
install_codeon the management canister. - System API calls
ic0.msg_caller_sizeandic0.msg_caller_copycan 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.
0.20.0 (2023-07-11)
Section titled “0.20.0 (2023-07-11)”- 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.
0.19.0 (2023-06-08)
Section titled “0.19.0 (2023-06-08)”- 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_infomanagement 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_setcan be invoked in canister pre-upgrade - added modeling WASM start function in the concrete
CanisterModulespecification - 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 usingspecified_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
sendersin envelope delegations (restricting users to which a delegation applies) - all
/request_status/<request_id>paths must refer to the samerequest_idin aread_staterequest - IC protocol execution error conditions (such as failing
inspect_messagemethod of a canister) are returned as 200 HTTP responses with a cbor body describing the error (instead of 4xx or 5xx HTTP responses)
0.18.9 (2022-12-06)
Section titled “0.18.9 (2022-12-06)”- Global timers
- Canister version
- Clarifications for HTTP requests & Bitcoin integration costs
0.18.8 (2022-11-09)
Section titled “0.18.8 (2022-11-09)”- Updated HTTP request API
- Canister status available to canister
- 64-bit stable memory is no longer experimental
0.18.7 (2022-09-27)
Section titled “0.18.7 (2022-09-27)”- HTTP request API
- Reserved principals
0.18.6 (2022-08-09)
Section titled “0.18.6 (2022-08-09)”- 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
0.18.5 (2022-07-08)
Section titled “0.18.5 (2022-07-08)”- Idle consumption of resources in cycles per day can be obtain via
canister_statusmethod of the management canister - Include the HTTP Gateway Protocol in this spec
- Clarifications in definition of cycles consumption
0.18.4 (2022-06-20)
Section titled “0.18.4 (2022-06-20)”- 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
0.18.3 (2022-01-10)
Section titled “0.18.3 (2022-01-10)”- New System API which uses 128-bit values to represent the amount of cycles
- Subnet delegations include a canister id scope
0.18.2 (2021-09-29)
Section titled “0.18.2 (2021-09-29)”- Canister heartbeat
- Terminology changes
- Support for 64-bit stable memory
0.18.1 (2021-08-04)
Section titled “0.18.1 (2021-08-04)”- Support RSA PKCS#1 v1.5 signatures in web authentication
- Spec clarification: Fix various typos and improve textual clarity
0.18.0 (2021-05-18)
Section titled “0.18.0 (2021-05-18)”- A canister has a set of controllers, instead of always one
0.17.0 (2021-04-22)
Section titled “0.17.0 (2021-04-22)”- 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_canisterandupdate_settings.install_codeno longer takes allocation settings. - A freezing threshold can be configured via the canister settings
0.16.1 (2021-04-14)
Section titled “0.16.1 (2021-04-14)”- The cleanup callback is introduced
0.16.0 (2021-03-25)
Section titled “0.16.0 (2021-03-25)”- New http v2 API that allows for stateless boundary nodes
0.15.6 (2021-03-25)
Section titled “0.15.6 (2021-03-25)”- 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_randanddeposit_cyclesare accepted - A memory allocation of
0means “best effort”
0.15.5 (2021-03-11)
Section titled “0.15.5 (2021-03-11)”- deposit_cycles(): any caller allowed
0.15.4 (2021-03-04)
Section titled “0.15.4 (2021-03-04)”- Ingress message filtering
- Add ECDSA signatures on curve secp256k1
- Clarify that the
ic0.data_certificate_presentsystem function may be called in all contexts.
0.15.3 (2021-02-26)
Section titled “0.15.3 (2021-02-26)”- Expose module hash and controller via
read_state
0.15.2 (2021-02-09)
Section titled “0.15.2 (2021-02-09)”- The document is renamed to “Internet Computer Interface Spec”
0.15.0 (2020-12-17)
Section titled “0.15.0 (2020-12-17)”- Support for raw Ed25519 keys is removed
0.14.1 (2020-12-08)
Section titled “0.14.1 (2020-12-08)”- The default
memory_allocationbecomes unspecified
0.14.0 (2020-11-18)
Section titled “0.14.0 (2020-11-18)”- Support for funds is scaled back to only support cycles
- The
ic0.msg_cycles_acceptsystem call now returns the actually accepted cycles - The
provisional_management calls are introduced
0.13.2 (2020-11-12)
Section titled “0.13.2 (2020-11-12)”- The
ic0.canister_statussystem call
0.13.1 (2020-11-06)
Section titled “0.13.1 (2020-11-06)”- Delegation between user public keys
0.13.0 (2020-10-19)
Section titled “0.13.0 (2020-10-19)”- Certification (also removes “request-status” request)
0.12.2 (2020-10-23)
Section titled “0.12.2 (2020-10-23)”- User authentication method based on WebAuthn is introduced
- User authentication can use ECDSA
- Public keys are DER-encoded
0.12.1 (2020-10-16)
Section titled “0.12.1 (2020-10-16)”- Return more information in the
canister_statusmanagement call
0.12.0 (2020-10-13)
Section titled “0.12.0 (2020-10-13)”- Anonymous requests must have the sender field set
0.11.1 (2020-10-01)
Section titled “0.11.1 (2020-10-01)”- The
deposit_fundscall
0.11.0 (2020-09-23)
Section titled “0.11.0 (2020-09-23)”- Inter-canister calls are now performed using a builder-like API
- Support for funds (balances and transfers)
0.10.3 (2020-09-21)
Section titled “0.10.3 (2020-09-21)”- The anonymous user is introduced
0.10.1 (2020-09-01)
Section titled “0.10.1 (2020-09-01)”- Forward-port changes from 0.9.3
0.10.0 (2020-08-06)
Section titled “0.10.0 (2020-08-06)”- Users can set/update a memory allocation when installing/upgrading a canister.
- The
expiryfield is added to requests
0.9.3 (2020-09-01)
Section titled “0.9.3 (2020-09-01)”- The management canister supports the
raw_randmethod
0.9.2 (2020-08-05)
Section titled “0.9.2 (2020-08-05)”- Canister controllers can stop/start canisters and can query their status.
- Canister controllers can delete canisters
0.9.1 (2020-07-20)
Section titled “0.9.1 (2020-07-20)”- Forward-port changes from 0.8.2
0.9.0 (2020-07-15)
Section titled “0.9.0 (2020-07-15)”- 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
0.8.2 (2020-07-17)
Section titled “0.8.2 (2020-07-17)”- Installing code via
reinstallworks also on the empty canister
0.8.1 (2020-07-10)
Section titled “0.8.1 (2020-07-10)”- Reflect refined process in README and intro.
ic0.timeadded
0.8.0 (2020-06-23)
Section titled “0.8.0 (2020-06-23)”- Revert the introduction of a domain separator
0.6.2 (2020-06-23)
Section titled “0.6.2 (2020-06-23)”- Fix meaning-changing typos in
ic.did
0.6.0 (2020-06-08)
Section titled “0.6.0 (2020-06-08)”- Make all canister ids system-chosen
- HTTP requests for management features are removed
0.4.0 (2020-05-25)
Section titled “0.4.0 (2020-05-25)”- (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
controllerattribute, add a request to change it - The IC management canister is introduced
0.2.16 (2020-05-29)
Section titled “0.2.16 (2020-05-29)”- More tests about calls from query methods
0.2.14 (2020-05-14)
Section titled “0.2.14 (2020-05-14)”- Bugfix: Mode should be
reinstall, notreplace
0.2.8 (2020-04-23)
Section titled “0.2.8 (2020-04-23)”- Include section with CDDL description
0.2.4 (2020-03-23)
Section titled “0.2.4 (2020-03-23)”- simplify versioning (only three components), skip 0.2.2 to avoid confusion with 0.2.0.2
- Clarification:
replyfield is always present - General cleanup based on front-to-back reading
0.2.0.0 (2020-03-11)
Section titled “0.2.0.0 (2020-03-11)”- This is the first release. Subsequent releases will include a changelog.