openapi: 3.0.1 info: title: Jans Config API - Fido2 contact: name: Gluu Support url: https://support.gluu.org email: xxx@gluu.org license: name: Apache 2.0 url: https://github.com/JanssenProject/jans/blob/main/LICENSE version: 1.0.0 servers: - url: https://jans.io/ description: The Jans server tags: - name: Fido2 - Configuration - name: Fido2 - Registration - name: Fido2 - Metrics - name: Fido2 - Trust paths: /fido2/fido2-config: get: tags: - Fido2 - Configuration summary: Gets Jans Authorization Server Fido2 configuration properties description: Gets Jans Authorization Server Fido2 configuration properties operationId: get-properties-fido2 responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/AppConfiguration" "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all put: tags: - Fido2 - Configuration summary: Updates Fido2 configuration properties description: Updates Fido2 configuration properties operationId: put-properties-fido2 requestBody: description: Fido2Config content: application/json: schema: $ref: "#/components/schemas/AppConfiguration" responses: "200": description: Fido2Config content: application/json: schema: $ref: "#/components/schemas/AppConfiguration" "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/adoption: get: tags: - Fido2 - Metrics summary: Get Fido2 adoption metrics by time range. description: Get Fido2 adoption metrics by time range. operationId: get-fido2-adoption-metrics parameters: - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "newUsers": 1, "returningUsers": 0, "adoptionRate": 1, "totalUniqueUsers": 1 } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/attestation-rejections: get: tags: - Fido2 - Metrics summary: Get Fido2 attestation rejection analytics by time range. description: Get Fido2 attestation rejections broken down by trust diagnostic code. operationId: get-fido2-metrics-analytics-attestation-rejections parameters: - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "totalRejections": 37, "registrationAttempts": 412, "rejectionRate": 0.0898, "reasonCodes": { "JFS_AAGUID_NOT_IN_MDS": 21, "JFS_AUTHENTICATOR_STATUS_UNACCEPTABLE": 9, "JFS_ROOT_CERT_NOT_TRUSTED": 5, "JFS_ATTESTATION_FORMAT_NOT_PERMITTED": 2 }, "topRejectedAaguids": { "d8522d9f-575b-4866-88a9-ba99fa02f35b": 14, "cb69481e-8ff7-4039-93ec-0a2729a154a8": 9, "2fc0579f-8113-47ea-b116-bb5a8db9202a": 7 } } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/devices: get: tags: - Fido2 - Metrics summary: Get Fido2 devices analytics metrics by time range. description: Get Fido2 devices analytics metrics by time range. operationId: get-fido2-metrics-analytics-devices parameters: - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "operatingSystems": {}, "deviceTypes": {}, "authenticatorTypes": { "cross-platform": 1 }, "browsers": {} } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/errors: get: tags: - Fido2 - Metrics summary: Get Fido2 error analysis metrics by time range. description: Get Fido2 error analysis metrics by time range. operationId: get-fido2-metrics-analytics-errors parameters: - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string - name: operationType in: query description: "Operation type to report on: REGISTRATION or AUTHENTICATION.\ \ Omit to report both together, in which case every rate covers registration\ \ and authentication combined." schema: type: string enum: - REGISTRATION - AUTHENTICATION responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: "{\n \"errorCategories\": {},\n \"failureRate\": 0.75,\n\ \ \"successRate\": 0.25,\n\t\"completionRate\": 0.48,\n\t\"\ dropOffRate\": 0.52,\n \"topErrors\": {}\n}\n" "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/aggregations/{aggregationType}: get: tags: - Fido2 - Metrics summary: Get a list of Fido2 aggregated metrics by time range. description: Get a list of Fido2 aggregated metrics by time range. operationId: get-fido2-metrics-aggregated parameters: - name: limit in: query description: Search size - max size of the results to return schema: type: integer format: int32 default: 50 - name: startIndex in: query description: The 0-based index of the first query result schema: type: integer format: int32 default: 0 - name: aggregationType in: path description: ' Aggregation Type' required: true schema: type: string default: "" - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2MetricsAggregationPagedResult" examples: Response example: description: Response example value: | { "start": 0, "totalEntriesCount": 1, "entriesCount": 1, "entries": [ { "dn": "jansId=HOURLY_2026-02-20-15,ou=fido2-aggregations,o=jans", "id": "HOURLY_2026-02-20-15", "aggregationType": "HOURLY", "startTime": "2026-02-20T15:00:00", "endTime": "2026-02-20T16:00:00", "uniqueUsers": 1, "lastUpdated": "2026-02-20T16:05:00", "fallbackEvents": 0, "registrationSuccessRate": 0.25, "authenticationAttempts": 0, "metricsData": { "deviceTypes": { "cross-platform": 1 }, "fallbackEvents": 0, "registrationAttempts": 4, "registrationFailures": 3, "registrationSuccesses": 1, "authenticationAttempts": 0, "authenticationFailures": 0, "authenticationSuccesses": 0, "registrationAvgDuration": 471.0, "registrationSuccessRate": 0.25 }, "period": "2026-02-20-15", "registrationAttempts": 4, "registrationSuccesses": 1, "registrationFailures": 3, "authenticationSuccesses": 0, "authenticationFailures": 0, "registrationAvgDuration": 471.0, "deviceTypes": { "cross-platform": 1 }, "baseDn": "jansId=HOURLY_2026-02-20-15,ou=fido2-aggregations,o=jans" } ] } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/aggregations/{aggregationType}/summary: get: tags: - Fido2 - Metrics summary: Get Fido2 aggregation summary by time range. description: Get Fido2 aggregation summary by time range. operationId: get-fido2-aggregation-summary-metrics parameters: - name: aggregationType in: path description: Metrics Aggregation Type required: true schema: type: string default: "" - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "totalRegistrations": 4, "totalOperations": 4, "totalFallbacks": 0, "totalAuthentications": 0, "avgRegistrationSuccessRate": 0.25, "avgAuthenticationSuccessRate": 0 } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/entries: get: tags: - Fido2 - Metrics summary: Get a list of Fido2 Metrics by time range. description: Get a list of Fido2 Metrics by time range. operationId: get-fido2-metrics parameters: - name: limit in: query description: Search size - max size of the results to return schema: type: integer format: int32 default: 50 - name: startIndex in: query description: The 0-based index of the first query result schema: type: integer format: int32 default: 0 - name: start_date in: query description: "Start date/time for entries report. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2MetricsEntryPagedResult" examples: Response example: description: Response example value: | { "start": 1, "totalEntriesCount": 10, "entriesCount": 2, "entries": [ { "dn": "jansId=086088ff-7a03-4e63-94b9-f4ab760edce2,ou=fido2-metrics,o=jans", "id": "086088ff-7a03-4e63-94b9-f4ab760edce2", "timestamp": "2026-02-17T06:26:39", "userId": "e9e63718-7909-49c6-9feb-eeadd0c839b9", "username": "test", "operationType": "AUTHENTICATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=086088ff-7a03-4e63-94b9-f4ab760edce2,ou=fido2-metrics,o=jans" }, { "dn": "jansId=9655ee6b-eaf3-43e4-930f-b19478dc0dad,ou=fido2-metrics,o=jans", "id": "9655ee6b-eaf3-43e4-930f-b19478dc0dad", "timestamp": "2026-02-17T06:26:45", "userId": "e9e63718-7909-49c6-9feb-eeadd0c839b9", "username": "test", "operationType": "AUTHENTICATION", "status": "SUCCESS", "durationMs": 109, "authenticatorType": "platform", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=9655ee6b-eaf3-43e4-930f-b19478dc0dad,ou=fido2-metrics,o=jans" } ] } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/entries/user/{userId}: get: tags: - Fido2 - Metrics summary: Get a list of Fido2 metrics for a specific user by time range. description: Get a list of Fido2 metrics for a specific user by time range. operationId: get-fido2-metrics-by-user parameters: - name: limit in: query description: Search size - max size of the results to return schema: type: integer format: int32 default: 50 - name: startIndex in: query description: The 0-based index of the first query result schema: type: integer format: int32 default: 0 - name: userId in: path description: user Id required: true schema: type: string - name: start_date in: query description: "Start date/time for entries report. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2MetricsEntryPagedResult" examples: Response example: description: Response example value: | { "start": 0, "totalEntriesCount": 4, "entriesCount": 2, "entries": [ { "dn": "jansId=0053a54e-5bf9-414f-b436-fcfcc9b1b440,ou=fido2-metrics,o=jans", "id": "0053a54e-5bf9-414f-b436-fcfcc9b1b440", "timestamp": "2026-02-20T15:53:39", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=0053a54e-5bf9-414f-b436-fcfcc9b1b440,ou=fido2-metrics,o=jans" }, { "dn": "jansId=ff17dfa5-aaa1-4395-817e-b1f537c2b5ce,ou=fido2-metrics,o=jans", "id": "ff17dfa5-aaa1-4395-817e-b1f537c2b5ce", "timestamp": "2026-02-20T15:53:59", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=ff17dfa5-aaa1-4395-817e-b1f537c2b5ce,ou=fido2-metrics,o=jans" } ] } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/config: get: tags: - Fido2 - Metrics summary: Get Fido2 metrics configuration. description: Get Fido2 metrics configuration. operationId: get-fido2-metrics-configuration responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "metricsEnabled": true, "supportedAggregationTypes": [ "HOURLY", "DAILY", "WEEKLY", "MONTHLY" ], "retentionDays": 90, "performanceMetrics": true, "deviceInfoCollection": true, "aggregationEnabled": true, "errorCategorization": true } "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/entries/operation/{operationType}: get: tags: - Fido2 - Metrics summary: Get a list of Fido2 metrics for a operation type by time range. description: Get a list of Fido2 metrics for a operation type by time range. operationId: get-fido2-metrics-by-operation parameters: - name: limit in: query description: Search size - max size of the results to return schema: type: integer format: int32 default: 50 - name: startIndex in: query description: The 0-based index of the first query result schema: type: integer format: int32 default: 0 - name: operationType in: path description: Operation Type required: true schema: type: string - name: start_date in: query description: "Start date/time for entries report. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2MetricsEntryPagedResult" examples: Response example: description: Response example value: | { "start": 0, "totalEntriesCount": 4, "entriesCount": 4, "entries": [ { "dn": "jansId=0053a54e-5bf9-414f-b436-fcfcc9b1b440,ou=fido2-metrics,o=jans", "id": "0053a54e-5bf9-414f-b436-fcfcc9b1b440", "timestamp": "2026-02-20T15:53:39", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=0053a54e-5bf9-414f-b436-fcfcc9b1b440,ou=fido2-metrics,o=jans" }, { "dn": "jansId=ff17dfa5-aaa1-4395-817e-b1f537c2b5ce,ou=fido2-metrics,o=jans", "id": "ff17dfa5-aaa1-4395-817e-b1f537c2b5ce", "timestamp": "2026-02-20T15:53:59", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=ff17dfa5-aaa1-4395-817e-b1f537c2b5ce,ou=fido2-metrics,o=jans" }, { "dn": "jansId=eadd61b1-0ecf-43c8-863c-693470a001f7,ou=fido2-metrics,o=jans", "id": "eadd61b1-0ecf-43c8-863c-693470a001f7", "timestamp": "2026-02-20T15:54:26", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "ATTEMPT", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=eadd61b1-0ecf-43c8-863c-693470a001f7,ou=fido2-metrics,o=jans" }, { "dn": "jansId=4000d3e0-a18b-4e1c-8184-d43263561a6a,ou=fido2-metrics,o=jans", "id": "4000d3e0-a18b-4e1c-8184-d43263561a6a", "timestamp": "2026-02-20T15:54:50", "userId": "e1f32d71-2954-4248-a7c5-a2d68ce39f8d", "username": "admin", "operationType": "REGISTRATION", "status": "SUCCESS", "durationMs": 471, "authenticatorType": "cross-platform", "nodeId": "12-63-57-5A-C8-E1", "baseDn": "jansId=4000d3e0-a18b-4e1c-8184-d43263561a6a,ou=fido2-metrics,o=jans" } ] } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/health: get: tags: - Fido2 - Metrics summary: Get Fido2 metrics health check endpoint. description: Get Fido2 metrics health check endpoint. operationId: get-fido2-metrics-health-check responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "metricsEnabled": true, "aggregationEnabled": true, "serviceAvailable": true, "status": "UP", "timestamp": "2026-03-12T12:11:06.79409705" } "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/performance: get: tags: - Fido2 - Metrics summary: Get Fido2 analytics performance metrics by time range. description: Get Fido2 analytics performance metrics by time range. operationId: get-fido2-analytics-performance-metrics parameters: - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "registrationAvgDuration": 420, "registrationMaxDuration": 890, "registrationMinDuration": 210 } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/comparison/{aggregationType}: get: tags: - Fido2 - Metrics summary: Get Fido2 period-over-period comparison. description: Get Fido2 period-over-period comparison. operationId: get-fido2-period-over-period-comparison parameters: - name: aggregationType in: path description: ' Aggregation Type' required: true schema: type: string default: "" - name: periods in: query description: periods schema: type: integer format: int32 default: 2 responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "previousPeriod": {}, "comparison": { "totalOperationsChange": 0 }, "currentPeriod": {} } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/metrics/analytics/trends/{aggregationType}: get: tags: - Fido2 - Metrics summary: Get Fido2 analytics trends by aggregationType for metrics over time. description: Get Fido2 analytics trends by aggregationType for metrics over time. operationId: get-fido2-analytics-trends-aggregationType parameters: - name: aggregationType in: path description: Aggregation Type required: true schema: type: string default: "" - name: start_date in: query description: "Start date/time for the log entries report. Accepted format\ \ dd-MM-yyyy or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example,\ \ 31-12-2025 and 2025-12-31T23:59:59Z." required: true schema: type: string - name: end_date in: query description: "End date/time for the log entries. Accepted format dd-MM-yyyy\ \ or ISO-8601 date-time like yyyy-MM-ddTHH:mm:ssZ, for example, 31-12-2025\ \ and 2025-12-31T23:59:59Z." required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "insights": { "avgRegistrationSuccessRate": 0.25, "avgAuthenticationSuccessRate": 0.67, "peakUsage": { "period": "2026-02-20", "totalOperations": 7 } }, "growthRate": 0.1, "trendDirection": "STABLE", "dataPoints": [ { "period": "2026-02-20", "metrics": { "deviceTypes": { "cross-platform": 1 }, "errorCounts": {}, "fallbackEvents": 1, "registrationAttempts": 4, "registrationFailures": 3, "registrationSuccesses": 1, "authenticationAttempts": 3, "authenticationFailures": 1, "authenticationSuccesses": 2, "registrationAvgDuration": 420, "registrationMinDuration": 210, "registrationMaxDuration": 880, "registrationSuccessRate": 0.25 }, "timestamp": 1771545600000 } ] } "400": description: Bad Request "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2-metrics.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all - oauth2: - https://jans.io/oauth/config/write-all /fido2/registration/id/{jansId}: get: tags: - Fido2 - Registration summary: Fetch Fido2RegistrationEntry by Id. description: Fetch Fido2RegistrationEntry by Id. operationId: get-fido2-by-id parameters: - name: jansId in: path description: Fido2Registration identifier required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2RegistrationEntry" examples: Response example: description: Response example value: | { "dn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,o=jans", "id": "6e196a5d-122b-4f06-8ff8-6f41b32bc2a6", "challange": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "challengeHash": 76195, "creationDate": "2024-09-25T17:13:51", "userInum": "1e73f801-22c2-4c19-a757-f96a87a5c713", "rpId": "admin-ui-test.gluu.org", "deletable": false, "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "publicKeyIdHash": 75217, "registrationData": { "createdDate": "2024-09-25T17:13:51", "updatedDate": "2024-09-25T17:15:43", "createdBy": "admin", "updatedBy": "admin", "username": "admin", "domain": "admin-ui-test.gluu.org", "userId": "fEJVrzv_s5p5_SCUjiVofbS01eKJwybVIFoRcE-Vl6Y", "challenge": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "attenstationRequest": "{\"attestation\":\"direct\",\"displayName\":\"admin\",\"authenticatorSelection\":{\"authenticatorAttachment\":\"platform\",\"userVerification\":\"discouraged\",\"requireResidentKey\":\"false\"},\"username\":\"admin\"}", "attenstationResponse": "{\"type\":\"public-key\",\"id\":\"RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8\",\"response\":{\"attestationObject\":\"o2NmbXRmcGFja2VkZ2F0dFN0bXSiY2FsZyZjc2lnWEcwRQIhANoBaaelHNJkCSnrmxSeixWKyCsA-IYW19LAv7IQoRcnAiAaQw6Rjc1By7RdA00k6qzDtOwLCoPvBTFACAL9nr6tPWhhdXRoRGF0YVikjZHVp5tBCFVmGadN9klm_j50zRn-V4OMG9wljvmxv3dFAAAAAK3OAAI1vMYKZIsLJfHwVQMAIEWgNQRYDMIClxUlWCeKj2m9A8_2OM57Vh9FqttVM-nPpQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE\",\"clientDataJSON\":\"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiQ0NrQ1pncmU4MUItNlNZQ3p6ZkxxU1JlRjRiN2VuYmlibnA0ODdBRVBrVSIsIm9yaWdpbiI6Imh0dHBzOi8vYWRtaW4tdWktdGVzdC5nbHV1Lm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0\"},\"clientExtensionResults\":{}}", "uncompressedECPoint": "pQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE", "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "type": "public-key", "status": "registered", "counter": 0, "attestationType": "packed", "signatureAlgorithm": 0, "applicationId": "admin-ui-test.gluu.org" }, "counter": 0, "registrationStatus": "registered", "baseDn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,o=jans" } "401": description: Unauthorized "404": description: Not Found "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all delete: tags: - Fido2 - Registration summary: Delete Fido2 Device Data based on device UID description: Delete Fido2 Device Data based on device UID operationId: delete-fido2-data parameters: - name: jansId in: path description: Fido2Registration Unique identifier. required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/ApiError" "401": description: Unauthorized "404": description: Not Found content: application/json: schema: $ref: "#/components/schemas/ApiError" "500": description: InternalServerError content: application/json: schema: $ref: "#/components/schemas/ApiError" security: - oauth2: - https://jans.io/oauth/config/fido2.delete - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/delete-all /fido2/registration/entries/{username}: get: tags: - Fido2 - Registration summary: Get details of connected FIDO2 devices registered to user description: Get details of connected FIDO2 devices registered to user operationId: get-registration-entries-fido2 parameters: - name: username in: path description: User name required: true schema: type: string responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2RegistrationEntryPagedResult" examples: Response example: description: Response example value: | { "start": 0, "totalEntriesCount": 2, "entriesCount": 2, "entries": [ { "dn": "jansId=50b1c565-cb63-4d1c-9e60-b25c7ed15807,ou=fido2_register,inum=4e138215-42c6-43b2-a138-e98d282421a3,ou=people,o=jans", "id": "50b1c565-cb63-4d1c-9e60-b25c7ed15807", "challange": "uKQWXt4bowi2DM8EWtuFWOhMZLh9Fqw7r-4LWFcFY2I", "challengeHash": 73147, "creationDate": "2024-09-25T17:32:00", "userInum": "4e138215-42c6-43b2-a138-e98d282421a3", "rpId": "admin-ui-test.gluu.org", "deletable": false, "publicKeyId": "TTtrcadQOUwPKVRBccLNJw3PnNw", "publicKeyIdHash": 31071, "registrationData": { "createdDate": "2024-09-25T17:32:00", "updatedDate": "2024-09-25T17:34:53", "createdBy": "arnab", "updatedBy": "arnab", "username": "arnab", "domain": "admin-ui-test.gluu.org", "userId": "EZ-odnHs9EDWdY52OikD--lqjvFAHqJdZctqnxu0Kao", "challenge": "uKQWXt4bowi2DM8EWtuFWOhMZLh9Fqw7r-4LWFcFY2I", "attenstationRequest": "{\"attestation\":\"direct\",\"displayName\":\"arnab\",\"authenticatorSelection\":{\"authenticatorAttachment\":\"platform\",\"userVerification\":\"discouraged\",\"requireResidentKey\":\"false\"},\"username\":\"arnab\"}", "attenstationResponse": "{\"type\":\"public-key\",\"id\":\"TTtrcadQOUwPKVRBccLNJw3PnNw\",\"response\":{\"attestationObject\":\"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViYjZHVp5tBCFVmGadN9klm_j50zRn-V4OMG9wljvmxv3ddAAAAAPv8MAcVTk7MjAtuAgVX170AFE07a3GnUDlMDylUQXHCzScNz5zcpQECAyYgASFYIEAey21gffFOf4PAHS2YtXE2mShi8LDXhHg5zouLceaXIlggvCyrOjHhY_KvPDCKmssmF1g8YbEn_fXRAfHf-cfVros\",\"clientDataJSON\":\"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoidUtRV1h0NGJvd2kyRE04RVd0dUZXT2hNWkxoOUZxdzdyLTRMV0ZjRlkySSIsIm9yaWdpbiI6Imh0dHBzOi8vYWRtaW4tdWktdGVzdC5nbHV1Lm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0\"},\"clientExtensionResults\":{}}", "uncompressedECPoint": "pQECAyYgASFYIEAey21gffFOf4PAHS2YtXE2mShi8LDXhHg5zouLceaXIlggvCyrOjHhY_KvPDCKmssmF1g8YbEn_fXRAfHf-cfVros", "publicKeyId": "TTtrcadQOUwPKVRBccLNJw3PnNw", "type": "public-key", "status": "registered", "counter": 0, "attestationType": "none", "signatureAlgorithm": 0, "applicationId": "admin-ui-test.gluu.org" }, "counter": 0, "registrationStatus": "registered", "baseDn": "jansId=50b1c565-cb63-4d1c-9e60-b25c7ed15807,ou=fido2_register,inum=4e138215-42c6-43b2-a138-e98d282421a3,ou=people,o=jans" }, { "dn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,inum=1e73f801-22c2-4c19-a757-f96a87a5c713,ou=people,o=jans", "id": "6e196a5d-122b-4f06-8ff8-6f41b32bc2a6", "challange": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "challengeHash": 76195, "creationDate": "2024-09-25T17:13:51", "userInum": "1e73f801-22c2-4c19-a757-f96a87a5c713", "rpId": "admin-ui-test.gluu.org", "deletable": false, "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "publicKeyIdHash": 75217, "registrationData": { "createdDate": "2024-09-25T17:13:51", "updatedDate": "2024-09-25T17:15:43", "createdBy": "admin", "updatedBy": "admin", "username": "admin", "domain": "admin-ui-test.gluu.org", "userId": "fEJVrzv_s5p5_SCUjiVofbS01eKJwybVIFoRcE-Vl6Y", "challenge": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "attenstationRequest": "{\"attestation\":\"direct\",\"displayName\":\"admin\",\"authenticatorSelection\":{\"authenticatorAttachment\":\"platform\",\"userVerification\":\"discouraged\",\"requireResidentKey\":\"false\"},\"username\":\"admin\"}", "attenstationResponse": "{\"type\":\"public-key\",\"id\":\"RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8\",\"response\":{\"attestationObject\":\"o2NmbXRmcGFja2VkZ2F0dFN0bXSiY2FsZyZjc2lnWEcwRQIhANoBaaelHNJkCSnrmxSeixWKyCsA-IYW19LAv7IQoRcnAiAaQw6Rjc1By7RdA00k6qzDtOwLCoPvBTFACAL9nr6tPWhhdXRoRGF0YVikjZHVp5tBCFVmGadN9klm_j50zRn-V4OMG9wljvmxv3dFAAAAAK3OAAI1vMYKZIsLJfHwVQMAIEWgNQRYDMIClxUlWCeKj2m9A8_2OM57Vh9FqttVM-nPpQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE\",\"clientDataJSON\":\"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiQ0NrQ1pncmU4MUItNlNZQ3p6ZkxxU1JlRjRiN2VuYmlibnA0ODdBRVBrVSIsIm9yaWdpbiI6Imh0dHBzOi8vYWRtaW4tdWktdGVzdC5nbHV1Lm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0\"},\"clientExtensionResults\":{}}", "uncompressedECPoint": "pQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE", "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "type": "public-key", "status": "registered", "counter": 0, "attestationType": "packed", "signatureAlgorithm": 0, "applicationId": "admin-ui-test.gluu.org" }, "counter": 0, "registrationStatus": "registered", "baseDn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,inum=1e73f801-22c2-4c19-a757-f96a87a5c713,ou=people,o=jans" } ] } "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all /fido2/registration: get: tags: - Fido2 - Registration summary: Get a list of Fido2RegistrationEntry. description: Get a list of Fido2RegistrationEntry. operationId: search-fido2-registration-data parameters: - name: limit in: query description: Search size - max size of the results to return schema: type: integer format: int32 default: 50 - name: pattern in: query description: Search pattern schema: type: string default: "" - name: startIndex in: query description: The 1-based index of the first query result schema: type: integer format: int32 default: 0 - name: sortBy in: query description: Data whose value will be used to order the returned response schema: type: string default: jansId - name: sortOrder in: query description: Order in which the sortBy param is applied. Allowed values are "ascending" and "descending" schema: type: string default: ascending - name: fieldValuePair in: query description: Field and value pair for seraching schema: type: string default: "" examples: Field value example: description: Field value example value: "mail=abc@mail.com,jansStatus=true" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/Fido2RegistrationEntryPagedResult" examples: Response example: description: Response example value: | { "start": 0, "totalEntriesCount": 2, "entriesCount": 2, "entries": [ { "dn": "jansId=50b1c565-cb63-4d1c-9e60-b25c7ed15807,ou=fido2_register,inum=4e138215-42c6-43b2-a138-e98d282421a3,ou=people,o=jans", "id": "50b1c565-cb63-4d1c-9e60-b25c7ed15807", "challange": "uKQWXt4bowi2DM8EWtuFWOhMZLh9Fqw7r-4LWFcFY2I", "challengeHash": 73147, "creationDate": "2024-09-25T17:32:00", "userInum": "4e138215-42c6-43b2-a138-e98d282421a3", "rpId": "admin-ui-test.gluu.org", "deletable": false, "publicKeyId": "TTtrcadQOUwPKVRBccLNJw3PnNw", "publicKeyIdHash": 31071, "registrationData": { "createdDate": "2024-09-25T17:32:00", "updatedDate": "2024-09-25T17:34:53", "createdBy": "arnab", "updatedBy": "arnab", "username": "arnab", "domain": "admin-ui-test.gluu.org", "userId": "EZ-odnHs9EDWdY52OikD--lqjvFAHqJdZctqnxu0Kao", "challenge": "uKQWXt4bowi2DM8EWtuFWOhMZLh9Fqw7r-4LWFcFY2I", "attenstationRequest": "{\"attestation\":\"direct\",\"displayName\":\"arnab\",\"authenticatorSelection\":{\"authenticatorAttachment\":\"platform\",\"userVerification\":\"discouraged\",\"requireResidentKey\":\"false\"},\"username\":\"arnab\"}", "attenstationResponse": "{\"type\":\"public-key\",\"id\":\"TTtrcadQOUwPKVRBccLNJw3PnNw\",\"response\":{\"attestationObject\":\"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViYjZHVp5tBCFVmGadN9klm_j50zRn-V4OMG9wljvmxv3ddAAAAAPv8MAcVTk7MjAtuAgVX170AFE07a3GnUDlMDylUQXHCzScNz5zcpQECAyYgASFYIEAey21gffFOf4PAHS2YtXE2mShi8LDXhHg5zouLceaXIlggvCyrOjHhY_KvPDCKmssmF1g8YbEn_fXRAfHf-cfVros\",\"clientDataJSON\":\"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoidUtRV1h0NGJvd2kyRE04RVd0dUZXT2hNWkxoOUZxdzdyLTRMV0ZjRlkySSIsIm9yaWdpbiI6Imh0dHBzOi8vYWRtaW4tdWktdGVzdC5nbHV1Lm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0\"},\"clientExtensionResults\":{}}", "uncompressedECPoint": "pQECAyYgASFYIEAey21gffFOf4PAHS2YtXE2mShi8LDXhHg5zouLceaXIlggvCyrOjHhY_KvPDCKmssmF1g8YbEn_fXRAfHf-cfVros", "publicKeyId": "TTtrcadQOUwPKVRBccLNJw3PnNw", "type": "public-key", "status": "registered", "counter": 0, "attestationType": "none", "signatureAlgorithm": 0, "applicationId": "admin-ui-test.gluu.org" }, "counter": 0, "registrationStatus": "registered", "baseDn": "jansId=50b1c565-cb63-4d1c-9e60-b25c7ed15807,ou=fido2_register,inum=4e138215-42c6-43b2-a138-e98d282421a3,ou=people,o=jans" }, { "dn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,inum=1e73f801-22c2-4c19-a757-f96a87a5c713,ou=people,o=jans", "id": "6e196a5d-122b-4f06-8ff8-6f41b32bc2a6", "challange": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "challengeHash": 76195, "creationDate": "2024-09-25T17:13:51", "userInum": "1e73f801-22c2-4c19-a757-f96a87a5c713", "rpId": "admin-ui-test.gluu.org", "deletable": false, "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "publicKeyIdHash": 75217, "registrationData": { "createdDate": "2024-09-25T17:13:51", "updatedDate": "2024-09-25T17:15:43", "createdBy": "admin", "updatedBy": "admin", "username": "admin", "domain": "admin-ui-test.gluu.org", "userId": "fEJVrzv_s5p5_SCUjiVofbS01eKJwybVIFoRcE-Vl6Y", "challenge": "CCkCZgre81B-6SYCzzfLqSReF4b7enbibnp487AEPkU", "attenstationRequest": "{\"attestation\":\"direct\",\"displayName\":\"admin\",\"authenticatorSelection\":{\"authenticatorAttachment\":\"platform\",\"userVerification\":\"discouraged\",\"requireResidentKey\":\"false\"},\"username\":\"admin\"}", "attenstationResponse": "{\"type\":\"public-key\",\"id\":\"RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8\",\"response\":{\"attestationObject\":\"o2NmbXRmcGFja2VkZ2F0dFN0bXSiY2FsZyZjc2lnWEcwRQIhANoBaaelHNJkCSnrmxSeixWKyCsA-IYW19LAv7IQoRcnAiAaQw6Rjc1By7RdA00k6qzDtOwLCoPvBTFACAL9nr6tPWhhdXRoRGF0YVikjZHVp5tBCFVmGadN9klm_j50zRn-V4OMG9wljvmxv3dFAAAAAK3OAAI1vMYKZIsLJfHwVQMAIEWgNQRYDMIClxUlWCeKj2m9A8_2OM57Vh9FqttVM-nPpQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE\",\"clientDataJSON\":\"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiQ0NrQ1pncmU4MUItNlNZQ3p6ZkxxU1JlRjRiN2VuYmlibnA0ODdBRVBrVSIsIm9yaWdpbiI6Imh0dHBzOi8vYWRtaW4tdWktdGVzdC5nbHV1Lm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0\"},\"clientExtensionResults\":{}}", "uncompressedECPoint": "pQECAyYgASFYIMyALzgwTY7Oe3rzssnlBfrwk5TuZ1a-cKkEuRIYE0-tIlgghEQR51yw4l1fQLjvYi4ydFdOvC5rHkVrk-xxcuwcotE", "publicKeyId": "RaA1BFgMwgKXFSVYJ4qPab0Dz_Y4zntWH0Wq21Uz6c8", "type": "public-key", "status": "registered", "counter": 0, "attestationType": "packed", "signatureAlgorithm": 0, "applicationId": "admin-ui-test.gluu.org" }, "counter": 0, "registrationStatus": "registered", "baseDn": "jansId=6e196a5d-122b-4f06-8ff8-6f41b32bc2a6,ou=fido2_register,inum=1e73f801-22c2-4c19-a757-f96a87a5c713,ou=people,o=jans" } ] } "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all /fido2/trust/attestation/config: get: tags: - Fido2 - Trust summary: Get effective Fido2 attestation configuration. description: Get effective Fido2 attestation configuration. operationId: get-fido2-trust-attestation-config responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "attestationMode": "monitor", "attestationModeRecognized": true, "unattestedAuthenticatorsAllowed": true, "enterpriseAttestation": false, "metadataServiceDisabled": false, "appleRootCaPresent": true, "enabledFidoAlgorithms": [ "RS256", "ES256" ], "hints": [] } "401": description: Unauthorized "500": description: InternalServerError security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all /fido2/trust/mds/health: get: tags: - Fido2 - Trust summary: Get Fido2 MDS health. description: Get Fido2 MDS health. operationId: get-fido2-trust-mds-health responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/JsonNode" examples: Response example: description: Response example value: | { "status": "UP", "metadataServiceDisabled": false, "tocEntryCount": 1284, "nextUpdate": "2026-08-15", "blobExpired": false, "lastSuccessfulRefresh": "2026-08-01T04:15:22Z", "metadataServers": [ { "url": "https://mds.fidoalliance.org/", "rootCertConfigured": false } ], "timestamp": "2026-08-07T09:31:04.118Z" } "401": description: Unauthorized "500": description: InternalServerError "503": description: Service Unavailable - the metadata service is DOWN content: application/json: schema: $ref: "#/components/schemas/JsonNode" security: - oauth2: - https://jans.io/oauth/config/fido2.readonly - oauth2: - https://jans.io/oauth/config/fido2.write - oauth2: - https://jans.io/oauth/config/fido2.admin - oauth2: - https://jans.io/oauth/config/read-all components: schemas: AppConfiguration: type: object properties: issuer: type: string baseEndpoint: type: string cleanServiceInterval: type: integer format: int32 cleanServiceBatchChunkSize: type: integer format: int32 useLocalCache: type: boolean disableJdkLogger: type: boolean disableExternalLoggerConfiguration: type: boolean loggingLevel: type: string loggingLayout: type: string externalLoggerConfiguration: type: string metricReporterInterval: type: integer format: int32 metricReporterKeepDataDays: type: integer format: int32 metricReporterEnabled: type: boolean fido2MetricsEnabled: type: boolean fido2MetricsRetentionDays: type: integer format: int32 fido2DeviceInfoCollection: type: boolean fido2ErrorCategorization: type: boolean fido2PerformanceMetrics: type: boolean fido2MetricsAggregationEnabled: type: boolean personCustomObjectClassList: type: array items: type: string fido2Configuration: $ref: "#/components/schemas/Fido2Configuration" Fido2Configuration: type: object properties: authenticatorCertsFolder: type: string mdsCertsFolder: type: string mdsTocsFolder: type: string userAutoEnrollment: type: boolean unfinishedRequestExpiration: type: integer format: int32 authenticationHistoryExpiration: type: integer format: int32 recordAbandonedAssertions: type: boolean abandonedRequestExpiration: type: integer format: int32 abandonedRequestSweepInterval: type: integer format: int32 serverMetadataFolder: type: string enabledFidoAlgorithms: type: array items: type: string metadataServers: type: array items: $ref: "#/components/schemas/MetadataServer" disableMetadataService: type: boolean mdsDownloadStartupRetries: type: integer format: int32 mdsDownloadStartupRetryInterval: type: integer format: int32 hints: type: array items: type: string enterpriseAttestation: type: boolean attestationMode: type: string rp: type: array items: $ref: "#/components/schemas/RequestedParty" MetadataServer: type: object properties: url: type: string rootCert: type: string RequestedParty: type: object properties: id: type: string origins: type: array items: type: string JsonNode: type: object Fido2MetricsAggregation: type: object properties: dn: type: string id: type: string aggregationType: type: string startTime: type: string format: date-time endTime: type: string format: date-time uniqueUsers: type: integer format: int64 lastUpdated: type: string format: date-time performanceMetrics: type: object additionalProperties: type: object metricsData: type: object additionalProperties: type: object period: type: string registrationAttempts: type: integer format: int64 registrationSuccesses: type: integer format: int64 registrationFailures: type: integer format: int64 authenticationAttempts: type: integer format: int64 authenticationSuccesses: type: integer format: int64 authenticationFailures: type: integer format: int64 fallbackEvents: type: integer format: int64 registrationSuccessRate: type: number format: double authenticationSuccessRate: type: number format: double registrationAvgDuration: type: number format: double authenticationAvgDuration: type: number format: double deviceTypes: type: object additionalProperties: type: integer format: int64 errorCounts: type: object additionalProperties: type: integer format: int64 baseDn: type: string Fido2MetricsAggregationPagedResult: type: object properties: start: type: integer format: int32 totalEntriesCount: type: integer format: int32 entriesCount: type: integer format: int32 entries: type: array items: $ref: "#/components/schemas/Fido2MetricsAggregation" DeviceInfo: type: object properties: browser: type: string browser_version: type: string os: type: string os_version: type: string device_type: type: string platform: type: string user_agent: type: string Fido2MetricsEntry: type: object properties: dn: type: string id: type: string metricType: type: string timestamp: type: string format: date-time userId: type: string username: type: string operationType: type: string status: type: string durationMs: type: integer format: int64 authenticatorType: type: string deviceInfo: $ref: "#/components/schemas/DeviceInfo" errorReason: type: string errorCategory: type: string fallbackMethod: type: string fallbackReason: type: string userAgent: type: string ipAddress: type: string sessionId: type: string nodeId: type: string applicationType: type: string additionalData: type: object additionalProperties: type: object baseDn: type: string Fido2MetricsEntryPagedResult: type: object properties: start: type: integer format: int32 totalEntriesCount: type: integer format: int32 entriesCount: type: integer format: int32 entries: type: array items: $ref: "#/components/schemas/Fido2MetricsEntry" ApiError: type: object properties: code: type: string message: type: string description: type: string Fido2DeviceData: type: object properties: uuid: type: string token: type: string writeOnly: true type: type: string platform: type: string name: type: string os_name: type: string os_version: type: string custom_data: type: object additionalProperties: type: string push_token: type: string Fido2DeviceNotificationConf: type: object properties: sns_endpoint_arn: type: string sns_endpoint_arn_remove: type: string sns_endpoint_arn_history: type: array items: type: string Fido2RegistrationData: type: object properties: createdDate: type: string format: date-time updatedDate: type: string format: date-time createdBy: type: string updatedBy: type: string username: type: string origin: type: string userId: type: string challenge: type: string attestationRequest: type: string attestationResponse: type: string uncompressedECPoint: type: string publicKeyId: type: string type: type: string status: type: string enum: - pending - registered - compromised - canceled counter: type: integer format: int32 attestationType: type: string signatureAlgorithm: type: integer format: int32 rpId: type: string backupStateFlag: type: boolean backupEligibilityFlag: type: boolean attestedCredentialDataFlag: type: boolean extensionDataFlag: type: boolean userVerifiedFlag: type: boolean userPresentFlag: type: boolean attestationTrusted: type: boolean authentictatorAttachment: type: string credId: type: string transports: type: array items: type: string Fido2RegistrationEntry: type: object properties: dn: type: string id: type: string challange: type: string challengeHash: type: integer format: int32 creationDate: type: string format: date-time userInum: type: string rpId: type: string sessionStateId: type: string expirationDate: type: string format: date-time deletable: type: boolean ttl: type: integer format: int32 displayName: type: string publicKeyId: type: string publicKeyIdHash: type: integer format: int32 registrationData: $ref: "#/components/schemas/Fido2RegistrationData" counter: type: integer format: int32 registrationStatus: type: string enum: - pending - registered - compromised - canceled deviceNotificationConf: $ref: "#/components/schemas/Fido2DeviceNotificationConf" deviceData: $ref: "#/components/schemas/Fido2DeviceData" expiration: type: integer format: int32 writeOnly: true baseDn: type: string Fido2RegistrationEntryPagedResult: type: object properties: start: type: integer format: int32 totalEntriesCount: type: integer format: int32 entriesCount: type: integer format: int32 entries: type: array items: $ref: "#/components/schemas/Fido2RegistrationEntry" securitySchemes: oauth2: type: oauth2 flows: clientCredentials: tokenUrl: "https://{op-hostname}/.../token" scopes: https://jans.io/oauth/config/fido2.readonly: View fido2 config related information https://jans.io/oauth/config/fido2.write: Manage fido2 config related information https://jans.io/oauth/config/fido2.delete: Delete fido2 config related information https://jans.io/oauth/config/fido2-metrics.readonly: View fido2 metrics related information https://jans.io/oauth/config/fido2.admin: Admin to manage fido2 related information https://jans.io/oauth/config/read-all: Super admin for viewing application resource information https://jans.io/oauth/config/write-all: Super admin for updating application resource information https://jans.io/oauth/config/delete-all: Super admin for deleting application resource information