# API Generator

![](/files/-M7qOVRi0ofXEvDw_qqm)

For every CRUD, by default, QuickAdminPanel creates **API Routes** and **Controllers** for your CRUD menu item, so you can use it from your mobile app or front-end.

Whenever you create or edit a CRUD, there's a checkbox whether to generate the API functionality (see above).

If checked, there's a separate Controller created in **app/Http/Controllers/Api/V1/Admin** folder.

```
namespace App\Http\Controllers\Api\V1\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Http\Resources\Admin\UserResource;
use App\User;
use Gate;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class UsersApiController extends Controller
{
    public function index()
    {
        abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        return new UserResource(User::with(['roles'])->get());
    }

    public function store(StoreUserRequest $request)
    {
        $user = User::create($request->all());
        $user->roles()->sync($request->input('roles', []));

        return (new UserResource($user))
            ->response()
            ->setStatusCode(Response::HTTP_CREATED);
    }

    public function show(User $user)
    {
        abort_if(Gate::denies('user_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        return new UserResource($user->load(['roles']));
    }

    public function update(UpdateUserRequest $request, User $user)
    {
        $user->update($request->all());
        $user->roles()->sync($request->input('roles', []));

        return (new UserResource($user))
            ->response()
            ->setStatusCode(Response::HTTP_ACCEPTED);
    }

    public function destroy(User $user)
    {
        abort_if(Gate::denies('user_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        $user->delete();

        return response(null, Response::HTTP_NO_CONTENT);
    }
}
```

&#x20;Also it's added to **routes/api.php** file, like this:

```
Route::group(['prefix' => 'admin', 'as' => 'admin.', 'namespace' => 'Api\V1\Admin'], function () {
    Route::apiResource('users', 'UsersApiController');
});
```

You can turn this function on/off for every CRUD separately.

## How to Use Generated API

Default URL endpoints for all CRUDs are **/api/v1/\[crud\_name]**. We generate all API Resourceful Controller methods, so these URLs apply - [see official Laravel docs](https://laravel.com/docs/master/controllers#resource-controllers):

* GET /api/v1/users - get the list of users
* POST /api/v1/users - create new user
* GET /api/v1/users/1 - get the user with users.id = 1
* PUT /api/v1/users/1 - update the user with users.id = 1
* DELETE /api/v1/users/1 - delete the user with users.id = 1

Detailed visual example is in this blog article: [QuickAdminPanel API Generator with Laravel Sanctum](https://blog.quickadminpanel.com/quickadminpanel-api-generator-with-laravel-sanctum/)&#x20;

## How to Customize What API Returns

We also generate [Eloquent API Resources](https://laravel.com/docs/master/eloquent-resources) with their default functionality. See, for example, **app/Http/Resources/Admin/UserResource.php**:

```
namespace App\Http\Resources\Admin;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}
```

## Authentication with Laravel Sanctum

**Notice**: our tool is generating API routes that are protected by middleware **auth:sanctum** that comes from [Laravel Sanctum](https://laravel.com/docs/8.x/sanctum).

More information in this article: [QuickAdminPanel API Generator with Laravel Sanctum](https://blog.quickadminpanel.com/quickadminpanel-api-generator-with-laravel-sanctum/)&#x20;

## Uploading Files to API

Separate question from the customers was about uploading files to the API. For that, we have a separate article on our blog, which can be applied with or without QuickAdminPanel: [Laravel API: How to Upload File from Vue.js](https://quickadminpanel.com/blog/laravel-api-how-to-upload-file-from-vue-js/)

## Generating API Documentation

QuickAdminPanel doesn't generate API docs by default, but here's another article on our blog about the tool that we recommend: [Laravel API Documentation with OpenAPI/Swagger](https://quickadminpanel.com/blog/laravel-api-documentation-with-openapiswagger/)

![](/files/-M84zm_oc1aOBgLzFOjW)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://helpdocs.quickadminpanel.com/create-panel/api-generator.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
