API Services with Strapi is a course in building back-end APIs with Strapi 5, from content type design, REST and GraphQL to customising controllers and services with the Document Service API, securing them with JWT and API tokens, then testing and deploying with Docker. It suits backend and full-stack developers who know JavaScript, and you leave with a deployable registration API.
Modern applications often have several front ends sharing the same data, such as a website, a mobile app and internal systems. A headless CMS like Strapi lets a team build APIs and a content admin panel quickly without writing the whole back end by hand. In real projects, though, developers still need to customise business logic, control permissions, protect the API and deploy it securely, and they need to understand the major changes in Strapi 5, such as documentId, the new response format and the Document Service API that replaces the old Entity Service.
This course takes developers through building API services with Strapi 5. Learners create a TypeScript project, design content types, components, dynamic zones and relations, and use the REST API with filters, population, Draft & Publish and i18n. They then customise the back end with routes, controllers, services, the Document Service API, policies and middlewares, secure it with JWT, API tokens and CORS, and enable a GraphQL API. The course continues with connecting a front end through the Strapi Client, building a custom plugin, testing the API with Jest and Supertest, and enabling the Strapi MCP server for AI clients. It closes with a workshop that builds and deploys a training registration API with Docker and PostgreSQL. (3 days, 6 hours per day, 18 hours in total, Intermediate level.)
What you’ll gain
Understand the headless CMS approach and the major changes in Strapi 5
Design content types, components, dynamic zones and relations that fit real data
Use Strapi's REST API with filters, sorting, pagination, population, Draft & Publish and i18n
Customise routes, controllers and services, and write business logic with the Document Service API
Control access and security with policies, middlewares, JWT, API tokens and CORS
Enable a GraphQL API, connect front ends with the Strapi Client and build a custom plugin
Test the API and deploy Strapi with Docker and PostgreSQL
Who this course is for
Backend and full-stack developers who want to build APIs and content management systems quickly
Frontend developers who need a back end for websites or mobile apps using JavaScript or TypeScript
Developers on Strapi 4 who want to move to Strapi 5 the right way
Development teams who want content staff to manage data themselves through the admin panel
Prerequisites
Good JavaScript skills; familiarity with TypeScript and async/await helps you learn faster
Understanding of HTTP, JSON and basic REST API principles
Basic command-line, npm and Git skills
A laptop that can run a Node.js LTS release, Docker Desktop and VS Code, with permission to install software
Curriculum
Course Details
This is the 2026 edition of the API Services with Strapi course. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures with labs built on a single training registration API project throughout, at Intermediate level. The content has been rewritten for Strapi 5, covering documentId, the new response format and the Document Service API, and adds TypeScript, policies, middlewares,
API tokens, GraphQL, the Strapi Client, the Plugin SDK, testing, the Strapi MCP server and deployment with Docker and PostgreSQL. The course goes deep into the back end, while full-stack work with React continues in the React and NodeJS with Docker Workshop course. Every lab uses the free open source edition of Strapi. Learners take home a lab guide, source code for every lab and docker-compose files.
Day 1Strapi 5 and Content Modelling
Section 1: Lab: Headless CMS and Getting Started with Strapi 5
How a headless CMS differs from a traditional CMS and what it suits
What is new in Strapi 5: documentId, the new response format and the Document Service API
Create a TypeScript project with create-strapi and choose a database
Project structure, config files and the .env file
Lab: create a project, open the admin panel and create the first administrator
Section 2: Lab: Designing Content Types
Collection types and single types, and when to use each
Field types and validation in the Content-Type Builder
Components and dynamic zones for flexible content
Schema files in code, and managing content types with Git
Lab: design the content types for a training registration system
Section 3: Lab: Relations and the Media Library
One-to-one, one-to-many and many-to-many relations
Upload files and images through the Media Library, with automatically generated image sizes
Upload providers that store files in cloud storage instead of on the server
Lab: relate courses, sessions, instructors and registrants
Section 4: Lab: The REST API Strapi Generates
Standard endpoints for collection types and single types
Filters, sorting, pagination and selecting only the fields you need
Populate related data just enough, without over-fetching
Open Public and Authenticated permissions in Users & Permissions
Lab: call the API with Postman or Bruno and build queries with qs
Section 5: Lab: Draft & Publish and i18n
Draft and published content, and the status parameter in the API
Enable Internationalization (i18n) and manage Thai and English content
Fetch content by locale, and what to watch for with relations
An overview of Preview for checking pages before publishing
Lab: publish bilingual course data and fetch it through the API
Day 2Customising the Back End and Security
Section 6: Lab: Routes, Controllers and Services
The path of a request in Strapi, from route to service
Build with the core router, controller and service, then extend them
Add custom routes and actions of your own
Sanitise and validate data before returning it
Lab: a registration endpoint that checks available seats before saving
Section 7: Lab: The Document Service API
strapi.documents() with findMany, findOne, create and update
Working with documentId, locale and status
publish, unpublish and discardDraft from code
Migrating code from the Strapi 4 Entity Service to the Document Service
Lab: a service that counts registrants per session
Section 8: Lab: Policies, Middlewares and Document Service Middlewares
Policies that check access before a route runs
Route middlewares and global middlewares
Document Service middlewares with strapi.documents.use(), replacing the Strapi 4 patterns
Handle errors and return consistent error messages
Lab: let users edit only their own registrations
Section 9: Lab: Authentication, JWT and API Tokens
Register and log in through /api/auth/local and use JWTs
Roles and permissions in Users & Permissions
API tokens for system-to-system access, with fine-grained permissions
CORS, rate limiting and security settings for production
Lab: separate permissions for learners, staff and external systems
Section 10: Lab: GraphQL API
Install the GraphQL plugin and open the GraphQL sandbox
The queries and mutations Strapi generates automatically
Send JWTs with GraphQL and limit query depth
Choosing REST or GraphQL to suit the front end
Lab: fetch courses with their sessions in a single GraphQL query
Day 3Connecting, Extending and Deploying
Section 11: Lab: Connecting a Front End with the Strapi Client
Install @strapi/client and set the baseURL and token
collection(), single() and files for CRUD and file uploads
Filters, population and pagination through the client
Handle errors and store tokens safely on the front end
Lab: a web page listing courses with a registration form that calls Strapi
Section 12: Lab: Building Your Own Plugin
Choosing plugins from the Marketplace and what to check before installing
Create a plugin with @strapi/sdk-plugin init
The server and admin parts of a plugin, and registering services
Lab: a plugin that sends a confirmation email for each new registration
Section 13: Lab: Testing the API
Set up Jest in a Strapi 5 project with a test database
Unit tests for services and integration tests with Supertest
Test endpoints that need login, and cases without permission
Lab: a test suite for the training registration API
Section 14: Lab: The Strapi MCP Server and AI
What MCP is and what the Strapi MCP server can do
Enable the MCP server in config/server and authenticate with an admin token
Connect an MCP-capable AI client to read and manage content
Limit permissions and review AI output before publishing
Lab: have an AI client draft course data through MCP
Section 15: Workshop: Deploying with Docker and PostgreSQL
Environment variables and secrets for production
A Dockerfile and docker compose for Strapi with PostgreSQL
Move data between machines with the export, import and transfer commands
An overview of deploying on your own server and on Strapi Cloud
Workshop: deploy the complete training registration API and present the result
Schedule & training options
For individuals — public rounds
No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770
What is a headless CMS, and how does it differ from a traditional CMS?
A traditional CMS such as WordPress manages both the content and the pages that display it in one system. A headless CMS such as Strapi stores and manages content through an admin panel and delivers it as an API, REST or GraphQL, to any front end, such as a React or Next.js website, a mobile app or an internal system. Teams can choose their front-end technology freely and reuse the same data across many channels.
What are the steps to build an API with Strapi 5?
Create a project with npx create-strapi@latest, choosing TypeScript and a database, then open the admin panel and create content types and fields in the Content-Type Builder; Strapi generates the REST API automatically. Set permissions in Users & Permissions or create an API token, and try the endpoints with Postman or Bruno. For custom logic, extend controllers and services using the Document Service API, which in Strapi 5 identifies content by documentId.
What is the difference between a collection type and a single type in Strapi?
A collection type is for data with many entries, such as courses, articles or products, and its API offers both list and single-entry endpoints. A single type is for data that exists only once, such as homepage content or site settings, and its API always returns that one entry. Both can use components and dynamic zones, and both support Draft & Publish and i18n.
Who is the API Services with Strapi course for, and what should I know beforehand?
It suits backend, full-stack and frontend developers who want to build APIs and content management systems quickly, and developers on Strapi 4 who want to move to Strapi 5. You should write JavaScript well, understand basic HTTP, JSON and REST APIs, use the command line, npm and Git, and bring a laptop that can run a Node.js LTS release, Docker Desktop and VS Code.
What will I be able to do after the API Services with Strapi course?
You will be able to design content types and relations for real data, use Strapi 5's REST and GraphQL APIs, customise the back end with controllers, services, the Document Service API, policies and middlewares, control access with JWT and API tokens, connect front ends with the Strapi Client, build plugins, write tests and deploy with Docker and PostgreSQL, taking home the project source code. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.
Can the API Services with Strapi course be run in-house for our team?
Yes. It can be run in-house for your team, with examples adapted to your own work, such as designing content types for your organisation's real system or focusing on migrating projects from Strapi 4 to Strapi 5. You can request a quotation from this page, or contact us on LINE @itgenius or by phone on 02-570-8449.
Go, or Golang, is a language developed at Google that has become popular for backend, cloud and DevOps tooling. It compiles to a single file that runs anywhere you copy it, performs well, uses little memory and handles large amounts of concurrent work through…
Elasticsearch is a distributed search and analytics engine widely used both for search inside applications and for storing system logs so they can be investigated later, while Kibana is the interface for exploring that data and building charts and dashboards.…
Elasticsearch is a distributed search and analytics engine built on Apache Lucene. It powers search inside applications, log analytics and vector storage for AI work, while Kibana is used to explore and visualise the data. Both have moved on a long way in…