Description
Create an LDAP group synchronization in the Segura™ platform. A single request binds an Active Directory group, identified by a distinguished name and an LDAP filter, to a user group, assigns the ACL roles its members receive, and optionally configures the Domum block.
The synchronization is created in the active state. Creating it does not import any user: run POST | Run LDAP group sync to start the first import.
Prerequisites
- An application with the Users authorization granted by the administrator in A2A, and its resource permission set to Read and write. For more information, access How to manage authorizations in A2A.
- A valid OAuth 2.0 access token. For more information, access How to authenticate an application in A2A.
- The LDAP server, the user group, and any roles referenced in the request must already exist and be active.
- The
cotelicense module must be active to send thedomumblock.
An access token carries only the authorizations that existed when it was generated. After the administrator enables the Users authorization, generate a new token for the application, an existing token will not gain the new authorization.
Request
POST /api/v2/iam/ldap-group-syncs
Headers
| Header | Required | Description |
|---|---|---|
Content-Type |
Yes | Must be application/json. |
This endpoint does not support the Idempotency-Key header. Retrying a request creates a second synchronization. Check whether the resource already exists with GET | List all LDAP group syncs before you retry.
Request body
The body carries two objects. group_sync holds the synchronization itself, and domum holds the optional Domum integration.
group_sync
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Name of the synchronization. Maximum 100 characters. |
server_id |
int | Yes | Identification code of the LDAP server. The server must exist and be active. |
user_group_id |
int | Yes | Identification code of the user group that receives the synchronized users. The group must exist and be active. |
synchronization_enabled |
boolean | Yes | Indicates whether the synchronization runs. |
overwrite_user_accesses |
boolean | Yes | Indicates whether the synchronization overwrites the accesses already assigned to a user. Requires synchronization_enabled to be true. |
force_roles |
boolean | No | Indicates whether the synchronization removes from the user any role that the Active Directory group no longer grants. Default: true. |
automatic_sync |
boolean | No | Indicates whether the platform runs the synchronization on its own schedule. Default: false. |
dn |
string | Yes | Base distinguished name searched in the directory. Maximum 255 characters. |
ad_username_attribute |
string | Yes | Active Directory attribute read as the username. Maximum 255 characters. |
ad_name_attribute |
string | No | Active Directory attribute read as the full name. Allowed values: name, displayname, samaccountname, null. Values are lowercase. |
department_id |
int | No | Identification code of the department assigned to the synchronized users. Accepts null. |
ad_query |
string | Yes | LDAP filter that selects the groups to synchronize. Maximum 2048 characters. |
role_ids |
array of int | No | Identification codes of the ACL roles assigned to the synchronized users. |
domum
Send this object only when the cote license module is active. Without the license the request returns 422 api.feature.unavailable.
| Field | Type | Required | Description |
|---|---|---|---|
enabled |
boolean | Yes | Indicates whether the synchronized users receive Domum access. |
type |
string | Yes | Access profile granted in Domum. Allowed values: full_users, limited_users. |
vendor_id |
int | Conditional | Identification code of the vendor or internal group. Required when enabled is true. |
Example request POST {{url}}/api/v2/iam/ldap-group-syncs
Body
{
"group_sync": {
"name": "Infrastructure operators",
"server_id": 10,
"user_group_id": 7,
"synchronization_enabled": true,
"overwrite_user_accesses": false,
"force_roles": true,
"automatic_sync": false,
"dn": "OU=Operators,DC=example,DC=com",
"ad_username_attribute": "sAMAccountName",
"ad_name_attribute": "displayname",
"ad_query": "(&(objectClass=group)(cn=ops-*))",
"role_ids": [1, 3]
},
"domum": {
"enabled": true,
"type": "limited_users",
"vendor_id": 22
}
}
Response
HTTP/1.1 201 Created
Location: /api/v2/iam/ldap-group-syncs/501
ETag: "174f80fa9c3b4d2e"
The Location header holds the path of the created synchronization and the ETag header holds its current version. Keep the ETag value, PUT | Update LDAP group sync by [id], PATCH | Partially update LDAP group sync by [id], and DELETE | Delete LDAP group sync by [id] use it in the If-Match header to detect concurrent changes.
Example response body
{
"data": {
"id": "501",
"group_sync": {
"name": "Infrastructure operators",
"active": true,
"server": { "id": "10" },
"user_group": { "id": "7" },
"synchronization_enabled": true,
"overwrite_user_accesses": false,
"force_roles": true,
"automatic_sync": false,
"dn": "OU=Operators,DC=example,DC=com",
"ad_username_attribute": "sAMAccountName",
"ad_name_attribute": "displayname",
"department": null,
"ad_query": "(&(objectClass=group)(cn=ops-*))",
"roles": [{ "id": 1 }, { "id": 3 }]
},
"domum": {
"enabled": true,
"type": "limited_users",
"vendor": { "id": 22 }
}
},
"meta": {
"links": { "self": "/api/v2/iam/ldap-group-syncs/501" },
"actions": {
"sync": "/api/v2/iam/ldap-group-syncs/501/sync",
"deactivate": "/api/v2/iam/ldap-group-syncs/501/deactivate"
}
}
}
Response body fields
| Field | Type | Description |
|---|---|---|
data |
object | The created synchronization. |
meta |
object | Links and the actions available for the resource in its current state. |
data
| Field | Type | Description |
|---|---|---|
→id |
string | Unique identification code of the synchronization, assigned by Segura™. |
→group_sync |
object | The synchronization settings. |
→domum |
object | The Domum settings. Returned only when the cote license module is active. |
data.group_sync
| Field | Type | Description |
|---|---|---|
→→name |
string | Name of the synchronization. |
→→active |
boolean | Indicates whether the synchronization is active. A new synchronization is always created as true. |
→→server |
object | The LDAP server, as { "id": <string> }. The request sends server_id. |
→→user_group |
object | The user group, as { "id": <string> }. The request sends user_group_id. |
→→synchronization_enabled |
boolean | Indicates whether the synchronization runs. |
→→overwrite_user_accesses |
boolean | Indicates whether the synchronization overwrites accesses already assigned to a user. |
→→force_roles |
boolean | Indicates whether the synchronization removes roles the Active Directory group no longer grants. |
→→automatic_sync |
boolean | Indicates whether the platform runs the synchronization on its own schedule. |
→→dn |
string | Base distinguished name searched in the directory. |
→→ad_username_attribute |
string | Active Directory attribute read as the username. |
→→ad_name_attribute |
string | Active Directory attribute read as the full name. Returns null when the attribute sent is not supported. |
→→department |
object | The department assigned to the synchronized users. Returns null when not set. |
→→ad_query |
string | LDAP filter that selects the groups to synchronize. |
→→roles |
array of objects | The ACL roles assigned, each as { "id": <int> }. The request sends role_ids. |
data.domum
| Field | Type | Description |
|---|---|---|
→→enabled |
boolean | Indicates whether the synchronized users receive Domum access. |
→→type |
string | Access profile granted in Domum. Returns full_users or limited_users. |
→→vendor |
object | The vendor or internal group, as { "id": <int> }. The request sends vendor_id. |
Sending ad_name_attribute with a value the platform recognizes but does not support returns 201 Created and stores null. Check the ad_name_attribute value in the response to confirm the attribute was accepted.
Errors
| HTTP code | Message | Possible cause | Solution |
|---|---|---|---|
400 |
api.request.malformed |
The body is not valid JSON. | Check the JSON syntax and resend the request. |
403 |
api.permission.denied |
The application lacks permission for this resource. | Ask the administrator to check the application's Users authorization in A2A. |
422 |
api.validation.required_field |
A required field is missing or null. |
Send every required field listed in the request body tables. |
422 |
api.validation.invalid_type |
A field has the wrong primitive type. | Check the Type column in the request body tables. |
422 |
api.validation.length_exceeded |
A string is longer than the column allows. | Shorten the value to the maximum documented for the field. |
422 |
api.validation.invalid_reference |
server_id, user_group_id, department_id, an entry in role_ids, or domum.vendor_id does not exist. |
Confirm the referenced resources exist before you resend the request. |
422 |
api.validation.server.inactive |
server_id points to an inactive LDAP server. |
Activate the server, or reference an active one. |
422 |
api.validation.user_group.inactive |
user_group_id points to an inactive user group. |
Activate the group, or reference an active one. |
422 |
api.validation.overwrite.requires_sync_enabled |
overwrite_user_accesses is true while synchronization_enabled is false. |
Set synchronization_enabled to true, or set overwrite_user_accesses to false. |
422 |
api.validation.unknown_field |
The body carries a key that is not part of the resource schema. | Remove the key. Check that the body uses the group_sync and domum objects. |
422 |
api.enum.invalid_value |
ad_name_attribute or domum.type is outside its allowed values. |
Send one of the allowed values listed in the request body tables. |
422 |
api.feature.unavailable |
The domum block was sent without the cote license module. |
Remove the domum block, or ask the administrator to license the module. |
422 |
ldap_group_sync.domum.vendor_required |
domum.enabled is true without domum.vendor_id. |
Send domum.vendor_id. |
429 |
rate_limit_exceeded |
The application exceeded its request quota. | Wait for the period in the Retry-After header and resend the request. |
Authentication errors
| Message | Possible cause | Solution |
|---|---|---|
Client authentication failed. |
Application authentication failure with the Segura server. | Check the authentication parameters (Access Token URL, Client ID, and Client secret) and request a new access token. |
Invalid signature |
Failure in recognizing the client application URL. | Check the URL of the client application and resend the request. |
No route matched with those values. |
Missing authorization header in the API request. | Request a new access token. |
Request timed out. |
The request exceeded the timeout limit. | Check the connectivity between the source of the request and the Segura server. |