PHPackages                             arietimmerman/laravel-scim-server - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. arietimmerman/laravel-scim-server

ActiveLibrary[API Development](/categories/api)

arietimmerman/laravel-scim-server
=================================

Laravel Package for creating a SCIM server

v1.4.3(5mo ago)89389.7k↑13.6%43[1 issues](https://github.com/limosa-io/laravel-scim-server/issues)[1 PRs](https://github.com/limosa-io/laravel-scim-server/pulls)1MITPHPPHP ^8.0CI failing

Since Dec 23Pushed 3mo ago9 watchersCompare

[ Source](https://github.com/limosa-io/laravel-scim-server)[ Packagist](https://packagist.org/packages/arietimmerman/laravel-scim-server)[ RSS](/packages/arietimmerman-laravel-scim-server/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (136)Used By (1)

[![](https://github.com/arietimmerman/laravel-scim-server/workflows/CI/badge.svg)](https://github.com/arietimmerman/laravel-scim-server/workflows/CI/badge.svg)[![Latest Stable Version](https://camo.githubusercontent.com/5008774aa95b55e76043f618795b7cee3a5508dea886d76f540ef7f59099a5d5/68747470733a2f2f706f7365722e707567782e6f72672f6172696574696d6d65726d616e2f6c61726176656c2d7363696d2d7365727665722f762f737461626c65)](https://packagist.org/packages/arietimmerman/laravel-scim-server)[![Total Downloads](https://camo.githubusercontent.com/2f2bc95ba34b98c62d265592ae88fdb618a43bab081465ccf42a9521e70078c4/68747470733a2f2f706f7365722e707567782e6f72672f6172696574696d6d65726d616e2f6c61726176656c2d7363696d2d7365727665722f646f776e6c6f616473)](https://packagist.org/packages/arietimmerman/laravel-scim-server)

[![Logo of Laravel SCIM Server, the SCIM server implementation from scim.dev, SCIM Playground](./laravel-scim-server.svg)](./laravel-scim-server.svg)

SCIM 2.0 Server implementation for Laravel
==========================================

[](#scim-20-server-implementation-for-laravel)

Add SCIM 2.0 Server capabilities to your Laravel application with ease. This package requires minimal configuration to get started with the core SCIM flows and is powering [The SCIM Playground](https://scim.dev), one of the most widely tested SCIM servers available.

Why Laravel SCIM Server?
------------------------

[](#why-laravel-scim-server)

- Battle-tested with real-world providers through the SCIM Playground
- Familiar Laravel tooling and middleware integration
- Fully extensible configuration for resources, attributes, and filtering
- Ships with dockerized demo and an expressive test suite

Table of contents
-----------------

[](#table-of-contents)

- [Quick start](#quick-start)
- [Installation](#installation)
- [SCIM routes](#scim-routes)
- [Configuration](#configuration)
- [Security &amp; app integration](#security--app-integration)
- [Test server](#test-server)
- [Contributing &amp; support](#contributing--support)

Quick start
-----------

[](#quick-start)

Spin up a SCIM test server in seconds:

```
docker run -d -p 8000:8000 --name laravel-scim-server ghcr.io/limosa-io/laravel-scim-server:latest
```

Visit `http://localhost:8000/scim/v2/Users` (or `/Groups`, `/Schemas`, `/ResourceTypes`, etc.) to exercise the API.

Installation
------------

[](#installation)

Add the package to your Laravel app:

```
composer require arietimmerman/laravel-scim-server
```

Optionally publish the config for fine-grained control:

```
php artisan vendor:publish --tag=laravel-scim
```

If you need to add SCIM-specific columns (`formatted`, `active`, `roles`) to your users table, publish the migrations:

```
php artisan vendor:publish --tag=laravel-scim-migrations
php artisan migrate
```

**Note:** These migrations are optional. Only publish them if your SCIM implementation requires these specific fields in your users table.

SCIM routes
-----------

[](#scim-routes)

MethodPathDescriptionGET/scim/v1SCIM 1.x compatibility message (returns error with upgrade guidance)GET/scim/v2Cross-resource index (alias of `/scim/v2/`)GET/scim/v2/Cross-resource indexPOST/scim/v2/.searchCross-resource search across all typesPOST/scim/v2/BulkSCIM bulk operationsGET/scim/v2/ResourceTypesList available resource typesGET/scim/v2/ResourceTypes/{id}Retrieve a specific resource typeGET/scim/v2/SchemasList SCIM schemasGET/scim/v2/Schemas/{id}Retrieve a specific schemaGET/scim/v2/ServiceProviderConfigDiscover server capabilitiesGET/scim/v2/{resourceType}List resources of a given typePOST/scim/v2/{resourceType}Create a new resourcePOST/scim/v2/{resourceType}/.searchFilter resources of a given typeGET/scim/v2/{resourceType}/{resourceObject}Retrieve a single resourcePUT/scim/v2/{resourceType}/{resourceObject}Replace a resourcePATCH/scim/v2/{resourceType}/{resourceObject}Update a resourceDELETE/scim/v2/{resourceType}/{resourceObject}Delete a resourceOptional "Me" routes can be enabled separately:

MethodPathDescriptionGET/scim/v2/MeRetrieve the SCIM resource for the authenticated subjectPUT/scim/v2/MeReplace the SCIM resource for the authenticated subjectPOST/scim/v2/MeCreate the authenticated subject (requires `RouteProvider::meRoutePost()`)Configuration
-------------

[](#configuration)

The SCIM server can be customized using configuration options in `config/scim.php`:

```
return [
    // Base path for all SCIM routes
    'path' => env('SCIM_BASE_PATH', '/scim'),

    // Optional domain to restrict SCIM endpoints to
    'domain' => env('SCIM_DOMAIN', null),

    // Middleware for protected routes (resource operations)
    'middleware' => env('SCIM_MIDDLEWARE', []),

    // Middleware for public routes (ServiceProviderConfig, Schemas, ResourceTypes)
    'public_middleware' => env('SCIM_PUBLIC_MIDDLEWARE', []),

    // Omit the main schema namespace from resource responses
    'omit_main_schema_in_return' => env('SCIM_OMIT_MAIN_SCHEMA_IN_RETURN', false),

    // Omit attributes with null values from responses
    'omit_null_values' => env('SCIM_OMIT_NULL_VALUES', true),
];
```

You can override these in your `.env` file:

```
SCIM_BASE_PATH=/scim/api
SCIM_MIDDLEWARE=api,auth:sanctum
SCIM_PUBLIC_MIDDLEWARE=api
SCIM_OMIT_MAIN_SCHEMA_IN_RETURN=true
SCIM_OMIT_NULL_VALUES=false

```

Or pass as Docker environment variables:

```
docker run -e SCIM_BASE_PATH=/scim/api \
           -e SCIM_OMIT_MAIN_SCHEMA_IN_RETURN=true \
           -e SCIM_OMIT_NULL_VALUES=false \
           -p 8000:8000 \
           ghcr.io/limosa-io/laravel-scim-server:latest
```

If you need more control, you can disable route auto-publishing and register the routes manually:

```
// config/scim.php
return [
    'publish_routes' => false,
    // other config...
];

// In your RouteServiceProvider or a custom service provider:
ArieTimmerman\Laravel\SCIMServer\RouteProvider::routes([
    'path' => '/custom-scim',
    'domain' => 'api.example.com',
    'middleware' => ['api', 'auth:api', 'scoped-tokens'],
    'public_middleware' => ['api', 'rate-limit'],
]);
```

### Resource Configuration

[](#resource-configuration)

The package resolves configuration via `SCIMConfig::class`. Extend it to tweak resource definitions, attribute mappings, filters, or pagination defaults.

Register your custom config in `app/Providers/AppServiceProvider.php`:

```
$this->app->singleton(
    \ArieTimmerman\Laravel\SCIMServer\SCIMConfig::class,
    YourCustomSCIMConfig::class
);
```

Minimal override example:

```
