> Portal Navigation:
>
> - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version.
> - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages).
> - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`).
> - Top-level index of all portals: https://dev.wix.com/docs/llms.txt
> - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt
## Resource: Authenticate using the Wix Client in Self-Hosted Embedded Script Extensions
## Article: Inject an Embedded Script Extension with an Access Token
## Article Link: https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/self-hosting/supported-extensions/site-extensions/embedded-scripts/authenticate-using-the-wix-client-in-self-hosted-embedded-script-extensions.md
## Article Content:
# Authenticate using the Wix Client in Self-Hosted Embedded Script Extensions
In a self-hosted [embedded script extension](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/embedded-scripts/about-embedded-scripts.md), you need to use a [Wix Client](https://dev.wix.com/docs/sdk/articles/set-up-a-client/about-the-wix-client.md) to call Wix APIs using the [SDK](https://dev.wix.com/docs/sdk.md).
- To call frontend modules, the client must be initialized with the [Site host context](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md).
- To call backend modules, the client must be authenticated using [Site authentication](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md#auth).
> **Note:** We recommend always creating your client using Site host context and authentication so it can be used to call frontend and backend modules.
## Script types
Before starting to code, check whether your scripts are [standard JavaScript scripts](#standard-javascript-scripts) or [JavaScript modules (ESM)](#javascript-modules-esm).
- Standard JavaScript scripts either have no type specified or specify `type="text/javascript"` in the script tags.
- [JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) specify `type="module"` in the script tags and they use the `import` syntax.
> **Note:** Most modern build tools like [`Vite`](https://vitejs.dev/config/build-options) and [`esBuild`](https://esbuild.github.io/getting-started/#bundling-for-the-browser) output ESM bundles, so make sure to check your app's configuration.
## JavaScript modules (ESM)
In JavaScript modules, you need to export a function that Wix uses to inject your client with an access token to call backend modules.
1. For the script in which you want to call SDK methods, add `accesstoken="true"` to your script tag.
1. Create a client using [Site host context](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md) and [Site authentication](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md#auth).
1. Export a function exactly like this:
```js
export const injectAccessTokenFunction = myWixClient.auth.getAccessTokenInjector();
```
Wix calls this function to inject your client with an access token.
1. Use the client to call SDK methods.
### Example
The following example uses an authenticated client to call:
- `products.queryProducts` from the `@wix/stores` backend module
- `seo.title` from the `@wix/site-seo` frontend module
```js
```
## Standard JavaScript scripts
In standard JavaScript scripts, you don't need to provide Wix with any injector functions.
1. Create a JavaScript file to host your code. This file will be your scripts `src`.
1. Create a client using [Site host context](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md) and [Site authentication](https://dev.wix.com/docs/sdk/host-modules/site/introduction.md#auth).
1. Use the client to call SDK methods.
1. Create your script and add your JavaScript file as the script's `src`.
### Example
The following example uses an authenticated client to call:
- `products.queryProducts` from the `@wix/stores` backend module
- `seo.title` from the `@wix/site-seo` frontend module
```js
// my-file.js
import { site } from "@wix/site";
import { createClient } from "@wix/sdk";
import { products } from '@wix/stores';
import { seo } from "@wix/site-seo";
const myWixClient = createClient({
auth: site.auth(),
host: site.host({ applicationId: "" }),
modules: {
products,
seo
}
});
async function fetchData() {
try {
const productsQueryResult = await myWixClient.products.queryProducts({});
console.log('Products query result:', productsQueryResult);
const title = await myWixClient.seo.title();
console.log("Site title:", title);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
```