See the controllers' concepts for details.

How to create a controller?

There are two ways to create a controller:

  • Using the CLI strapi generate:controller user. Read the CLI documentation for more information.
  • Manually create a JavaScript file named User.js in ./api/**/controllers which contains at least one endpoint.

Adding Endpoints

Each controller’s action must be an async function and receives the context (ctx) object as first parameter containing the request context and the response context. The action has to be bounded by a route.


In this example, we are defining a specific route in ./api/hello/config/routes.json that takes Hello.index as handler. It means that every time a web browser is pointed to the /hello URL, the server will call the index action in the Hello.js controller. Our index action will return Hello World!. You can also return a JSON object.

Path β€” ./api/hello/config/routes.json.

  "routes": [
      "method": "GET",
      "path": "/hello",
      "handler": "Hello.index"

Path β€” ./api/hello/controllers/Hello.js.

module.exports = {
  // GET /hello
  index: async (ctx) => {
    ctx.send('Hello World!');

A route handler can only access the controllers defined in the ./api/**/controllers folders.