IC Interface Spec Changelog
Changelog
Section titled “Changelog”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.