diff --git a/docs/tutorials/developer-liftoff/level-2/2.2-advanced-canister-calls.mdx b/docs/tutorials/developer-liftoff/level-2/2.2-advanced-canister-calls.mdx index c9f0782c47..1b2c86e072 100644 --- a/docs/tutorials/developer-liftoff/level-2/2.2-advanced-canister-calls.mdx +++ b/docs/tutorials/developer-liftoff/level-2/2.2-advanced-canister-calls.mdx @@ -24,7 +24,7 @@ Let's first define the different types of canister calls and how they differ fro - **Update calls** are able to alter the canister's state. They are executed on all nodes of a subnet since the result must go through the subnet's consensus process. Update calls are submitted and answered asynchronously. -- **Composite queries** are query calls that can call other queries (on the same subnet). They can only be invoked via ingress messages using `dfx` or through an agent such as a browser front-end, and not by other canisters. +- **Composite queries** are query calls that can call other queries (on the same subnet). They can only be invoked via [ingress messages](https://internetcomputer.org/docs/current/references/ingress-messages) using `dfx` or through an agent such as a browser front-end, and not by other canisters. - **Certified variables** are verifiable pieces of data that have an associated certificate that proves the data's authenticity. Certified variables are set using an update call, then read using a query call. @@ -289,4 +289,4 @@ Did you get stuck somewhere in this tutorial, or do you feel like you need addit Next, let's dive into using third-party canisters. -- [2.3 Using third-party canisters](/docs/current/tutorials/developer-liftoff/level-2/2.3-third-party-canisters). \ No newline at end of file +- [2.3 Using third-party canisters](/docs/current/tutorials/developer-liftoff/level-2/2.3-third-party-canisters).