Skip to content

Probe the directory (admin-only, read-only)

POST
/api/admin/ldap/probe
curl --request POST \
--url https://example.com/api/admin/ldap/probe \
--header 'Content-Type: application/json' \
--header 'X-Ssoossh-Key-Secret: <X-Ssoossh-Key-Secret>' \
--data '{}'

Runs one directory lookup through the login path’s three stages — lookup, field resolution, then the merge and allowlist — and stops before the write. Reports the filter it actually sent, every attribute the directory returned rather than the ones the configuration names, what each field resolved to, which group values the allowlist would drop, and the config lines that would keep what is currently ignored.

The connection is not part of the request: the probe always uses the running ldap.url, bind credentials and base_dn, so it cannot be pointed at another host. It writes nothing.

What to ask the directory

Media typeapplication/json
One of:
object

Example generated

{}

What the probe found

Media typeapplication/json
object
attributes
required
Array<string>
base_dn
required

BaseDN, FilterSent, Mode and Attributes are the request as it went out, so an operator sees the rendered filter rather than the template.

string
directory_id
string
elapsed_ms
integer
entry
object
attributes
required
Array<object>
object
configured

Configured reports that a configured field reads this attribute, which is what the console highlights.

boolean
name
required
string
truncated_values

TruncatedValues is how many values the probe’s own cap dropped.

integer
values
required
Array<string>
dn
required
string
fields
Array<object>
object
attribute

Attribute is the entry attribute the field reads, absent for a search-only field.

string
attribute_present

AttributePresent distinguishes an attribute that is empty from one that is not on the entry at all — which is usually a typo.

boolean
attribute_values
Array<string>
error
string
name
required
string
searches
Array<object>
object
base_dn

BaseDN and FilterSent are what actually went to the directory.

string
entries
integer
error
string
filter_sent
string
name
required
string
value

Value is the attribute read off each matched entry.

string
values
Array<string>
values
required

Values is what the field resolved to, as the login path would compute it.

Array<string>
filter_sent
required
string
id_attribute

IDAttribute echoes ldap.id_attribute and DirectoryID is what it resolved to on the matched entry — the value that would be stored as the re-anchoring identifier. Both empty when it is unconfigured, in which case Suggestions names a candidate the entry actually carries.

string
matched

Matched is how many entries the filter found, counted up to the probe’s limit. The login path refuses anything but exactly one.

integer
matched_capped

MatchedCapped reports that the count stopped at a size limit, the probe’s or the directory’s, so Matched is a floor.

boolean
matched_dns

MatchedDNs lists the matching entries’ DNs when more than one matched, capped by the probe; Matched minus its length is how many were left out. Absent when one entry or none matched.

Array<string>
merge
Array<object>
object
action
required

Action is “override”, “persist-groups” or “extra”.

string
dropped
Array<string>
kept

Kept and Dropped split the values by the group allowlist. Dropped is only ever non-empty for the group field.

Array<string>
name
required
string
note
string
mode
required
string
suggestions
Array<object>
object
reason
required
string
yaml
required
string
timeout_ms
integer
tls_insecure_skip_verify

TLSInsecureSkipVerify reports that the connection did not verify the directory certificate.

boolean
wrote

Wrote is always false and is serialized anyway: the guarantee is part of the response, not only of the documentation.

boolean

Example generated

{
"attributes": [
"example"
],
"base_dn": "example",
"directory_id": "example",
"elapsed_ms": 1,
"entry": {
"attributes": [
{
"configured": true,
"name": "example",
"truncated_values": 1,
"values": [
"example"
]
}
],
"dn": "example"
},
"fields": [
{
"attribute": "example",
"attribute_present": true,
"attribute_values": [
"example"
],
"error": "example",
"name": "example",
"searches": [
{
"base_dn": "example",
"entries": 1,
"error": "example",
"filter_sent": "example",
"name": "example",
"value": "example",
"values": [
"example"
]
}
],
"values": [
"example"
]
}
],
"filter_sent": "example",
"id_attribute": "example",
"matched": 1,
"matched_capped": true,
"matched_dns": [
"example"
],
"merge": [
{
"action": "example",
"dropped": [
"example"
],
"kept": [
"example"
],
"name": "example",
"note": "example"
}
],
"mode": "example",
"suggestions": [
{
"reason": "example",
"yaml": "example"
}
],
"timeout_ms": 1,
"tls_insecure_skip_verify": true,
"wrote": true
}

Invalid request, filter or bindings

Media typeapplication/json
object
data

Data is always null on an error response.

error
required

Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.

string
error_code
required

ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.

string

Example

{
"error": "certificate request \"9f1c…\" not found",
"error_code": "not_found"
}

Not authenticated

Media typeapplication/json
object
data

Data is always null on an error response.

error
required

Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.

string
error_code
required

ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.

string

Example

{
"error": "certificate request \"9f1c…\" not found",
"error_code": "not_found"
}

Not authorized as admin

Media typeapplication/json
object
data

Data is always null on an error response.

error
required

Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.

string
error_code
required

ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.

string

Example

{
"error": "certificate request \"9f1c…\" not found",
"error_code": "not_found"
}

The user to bind against does not exist

Media typeapplication/json
object
data

Data is always null on an error response.

error
required

Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.

string
error_code
required

ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.

string

Example

{
"error": "certificate request \"9f1c…\" not found",
"error_code": "not_found"
}

Too many probes

Media typeapplication/json
object
data

Data is always null on an error response.

error
required

Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.

string
error_code
required

ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.

string

Example

{
"error": "certificate request \"9f1c…\" not found",
"error_code": "not_found"
}