Connect your JavaScript/TypeScript apps to a flexible and fully customizable Strapi backend with ease.
Before you begin, ensure you have the following:
- A Strapi backend up and running: quick start guide.
- The API URL of your Strapi instance: for example,
http://localhost:1337/api
. - A recent version of Node.js installed.
Install the SDK as a dependency in your project:
NPM
npm install @strapi/sdk-js
Yarn
yarn add @strapi/sdk-js
pnpm
pnpm add @strapi/sdk-js
To interact with your Strapi backend, initialize the SDK with your Strapi API base URL:
import { strapiSDK } from '@strapi/sdk-js';
const sdk = strapiSDK({ baseURL: 'http://localhost:1337/api' });
Alternatively, use a <script>
tag in a browser environment:
<script src="https://cdn.jsdelivr.net/npm/@strapi/sdk-js"></script>
<script>
const sdk = strapiSDK({ baseURL: 'http://localhost:1337/api' });
</script>
The SDK supports multiple authentication strategies for accessing authenticated content in your Strapi backend.
If your Strapi instance uses API tokens, configure the SDK like this:
const sdk = strapiSDK({
baseURL: 'http://localhost:1337/api',
auth: {
strategy: 'api-token',
options: { token: 'your-api-token-here' },
},
});
The Strapi SDK instance provides key properties and utility methods for content and API interaction:
baseURL
: base URL of your Strapi backend.fetch
: perform generic requests to the Strapi Content API using fetch-like syntax..collection(resource: string)
: get a manager instance for handling collection-type resources..single(resource: string)
: get a manager instance for handling single-type resources.
The .collection()
method provides a manager for working with collection-type resources,
which can have multiple entries.
Note: the resource
corresponds to the plural name of your collection type, as defined in the Strapi model.
find(queryParams?)
: fetch multiple entries.findOne(documentID, queryParams?)
: fetch a single entry by its ID.create(data, queryParams?)
: create a new entry.update(documentID, data, queryParams?)
: update an existing entry.delete(documentID, queryParams?)
: remove an entry.
const articles = sdk.collection('articles');
// Fetch all english articles sorted by title
const allArticles = await articles.find({
locale: 'en',
sort: 'title',
});
// Fetch a single article
const singleArticle = await articles.findOne('article-document-id');
// Create a new article
const newArticle = await articles.create({ title: 'New Article', content: '...' });
// Update an existing article
const updatedArticle = await articles.update('article-document-id', { title: 'Updated Title' });
// Delete an article
await articles.delete('article-id');
The .single()
method provides a manager for working with single-type resources, which have only one entry.
Note: the resource
corresponds to the singular name of your collection type, as defined in the Strapi model.
find(queryParams?)
: fetch the document.update(data, queryParams?)
: update the document.delete(queryParams?)
: remove the document.
const homepage = sdk.single('homepage');
// Fetch the default version of the homepage
const defaultHomepage = await homepage.find();
// Fetch the spanish version of the homepage
const spanishHomepage = await homepage.find({ locale: 'es' });
// Update the homepage draft content
const updatedHomepage = await homepage.update(
{ title: 'Updated Homepage Title' },
{ status: 'draft' }
);
// Delete the homepage content
await homepage.delete();
Hereβs how to combine .collection()
and .single()
methods in a real-world scenario:
const sdk = strapiSDK({
baseURL: 'http://localhost:1337/api',
auth: {
strategy: 'api-token',
options: { token: 'your-api-token-here' },
},
});
async function main() {
// Work with collections
const articles = sdk.collection('articles');
const newArticle = await articles.create({ title: 'Hello World', content: '...' });
console.log('Created Article:', newArticle);
const allArticles = await articles.find({ sort: 'createdAt:desc' });
console.log('All Articles:', allArticles);
// Work with single types
const homepage = sdk.single('homepage');
const homepageContent = await homepage.find();
console.log('Homepage Content:', homepageContent);
const updatedHomepage = await homepage.update({ title: 'Welcome to the New Homepage' });
console.log('Updated Homepage:', updatedHomepage);
}
main();